[Okta Webinar] Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 576
  • Last Modified:

JQuery Validation & ColdFusion -- Live Lookup

I am trying to use a live lookup to determine if a screenName is already in use.

I found the this example on the adobe forums, but I can't seem to get it to work...

http://forums.adobe.com/thread/447754

Everything input into the screen name input is returned as if it is already in the database.

Firebug outputs this...

params:
method      checkScreenName
returnformat      json

post:
Parameters     application/x-www-form-urlencoded
screenName      2nornot

Source
screenName=2nornot

response:
false

html:
false

I appreciate any help.
<script id="register" type="text/javascript">
$(document).ready(function() {
	// validate signup form on keyup and submit
	var validator = $("#registerForm").validate({
		rules: {
			screenName: {
				required: true,
				minlength: 2,
				remote: {
					url:"http://localHost:8500/myCigarHub.com/org/cigarHub/cigarHub.cfc?method=checkScreenName2&returnformat=json",
					type:"post"
				}
			},
		},
		messages: {
			screenName: {
				required: "Enter a username",
				minlength: jQuery.format("Enter at least {0} characters"),
				remote: jQuery.format("{0} is already in use")
			},
},

...</script>

   <!--- Check Username --->
    <cffunction name="checkScreenName" access="remote" output="true" returnformat="JSON">
		<cfargument	name="screenName" type="string" required="yes" default="">
		
		<cfset var screenNames = StructNew() />
		<cfset screenNames.found = false />
		
		<cfset var data = "">
		
		<cfquery name="data" datasource="cigarUsers">
		SELECT screenName
		FROM users
		WHERE screenName = <cfqueryparam cfsqltype="cf_sql_varchar" value="ARGUMENTS.SCREENNAME">
		</cfquery>
		
		<cfif data.recordCount GTE 1>
			<cfset screenNames.found = true />
		</cfif>
		<cfoutput>#SerializeJSON(screenNames.found)#</cfoutput>
    </cffunction>

Open in new window

0
av8or16
Asked:
av8or16
  • 5
  • 4
  • 3
2 Solutions
 
dgrafxCommented:
use <cfqueryparam cfsqltype="cf_sql_varchar" value="#ARGUMENTS.SCREENNAME#">
note the ## around arguments.screenname
0
 
av8or16Author Commented:
That was a dumb miss on my part.

However, the problem still persists.

"False" is returned each time regardless of whether a match was found in the database or not.
0
 
av8or16Author Commented:
I had the true/false in reverse.  This works now...

    <!--- Check Username --->
    <cffunction name="checkScreenName" access="remote" output="true" returnformat="JSON">
            <cfargument      name="screenName" type="string" required="yes" default="">
            
            <cfset var screenNames = StructNew() />
            <cfset screenNames.found = true />
            
            <cfset var data = "">
            
            <cfquery name="data" datasource="users">
            SELECT screenName
            FROM users
            WHERE screenName = <cfqueryparam cfsqltype="cf_sql_varchar" value="#ARGUMENTS.SCREENNAME#">
            </cfquery>
            
            <cfif data.recordCount GTE 1>
                  <cfset screenNames.found = false />
            </cfif>
            <cfoutput>#SerializeJSON(screenNames.found)#</cfoutput>
    </cffunction>
0
Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
dgrafxCommented:
ok - you need to return the data

<cfif data.recordCount GTE 1>
<cfset screenNames.found = true />
</cfif>
<CFRETURN screenNames.found />
</cffunction>
0
 
_agx_Commented:
First ensure checkScreenName() works manually.

<cffunction name="checkScreenName" output="true"
<cfoutput>#SerializeJSON(screenNames.found)#</cfoutput>


I haven't tested it but noticed the thread mentioned output should be false.  Also, the <cfoutput> seems odd. I'm assuming they meant to use cfreturn instead:

     ...
     <cfreturn SerializeJSON(screenNames.found)>
</cffunction>
0
 
dgrafxCommented:
yeah - ya did - i didn't catch that either!!!
0
 
_agx_Commented:
Glad you figured it out.  Though i'm still puzzled why they're using cfoutput ;-)
0
 
av8or16Author Commented:
Thanks for the help.  Its working great now.

One last question (jQuery)...

when the initial response comes back and it has found a record in the database, the validation message says "XYZ is already in use" which is what I want it to display.

If I set the focus on another input and go back to the screen name input and change it to another screen name that is taken, the response changes to "[object Object] is already in use".

Any suggestions?
0
 
_agx_Commented:
I'm not getting that result. Can you post a small runnable example (2 form fields and the js code)?
0
 
av8or16Author Commented:
I have posted a test form at:

http://www.cigarhub.com/registertest.cfm

validation can be found in firebug:

<script id="register"...

To Replicate:

type av8or11 into the screen name field.

It will correctly display that 'av8or11' is already in use.

However, now

1.  click in the other text box,
2.  then go back to screen name,
3.  then back to the other field.

It will switch to [object Object] is already in use.

This is not a major problem since I can simply change the text display to a static 'Screen Name is taken'.

I am a novice at javascript and jQuery and am more just curious as to why this is happeing.

Thanks
0
 
dgrafxCommented:
js access is denied error ...

change the url where you have localhost to the same url you have running in the browser
0
 
av8or16Author Commented:
Ok.  It is up an running now.

http://www.cigarhub.com/registertest.cfm

0

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

  • 5
  • 4
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now