我有项目,我想使用标准的Javascript Ajax Call从我的.cfc页面获取数据。后来我和JQuery合作过,现在我想看看有什么区别。所以我的javascript代码在用户点击下拉列表(onChnage函数)后被触发,我在该函数中传递参数。然后我有我的Ajax调用,到目前为止这部分内容都运行良好。现在我将方法和参数发送到.cfc页面,我的Coldfusion函数在哪里。在那里,我定义了我的agrument,我有cfquery。所以我的问题是如何创建JSON结构并返回到我的Javascript函数,我可以循环遍历这些元素?这是我的Ajax调用:
function myFunction(userNum){
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if(xmlhttp.status == 200) {
console.log(xmlhttp.responseText)
var data = JSON.parse(xmlhttp.responseText);
for(var i=0; i < data.length; i++){
alert(i);
}
}else{
alert('There was an error 400');
}
}
xmlhttp.open("GET", "Components/myCFCpage.cfc method=getRecs&userNum="+userNum.value, true);
xmlhttp.send();
}
所以在上面的函数中我有一个关于发送url参数的问题。是最好的方法来实现它在我的函数中应该是在xmlhttp.send()中吗?如果是这样有什么区别?我也应该检查状态&#34; 200&#34;它的方式或可以通过其他方式完成的方式? 这是我的cfc页面:
<cfcomponent>
<cffunction name="getRecs" access="remote" returntype="JSON">
<cfargument name="userNum" type="string" required="yes">
<cfset cfcResults = structNew()>
<cfset recs = StructNew()>
<cfif arguments.userNum NEQ ''>
<cfquery datasource="test" name="getUser">
SELECT user_id, first_name, last_name
FROM Users
WHERE user_id = <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.userNum#">
ORDER BY last_name
</cfquery>
<cfset cfcResults.recordcount = getUser.recordcount>
<cfloop query="getUser">
<cfset recs[currentRow] = StructNew()>
<cfset recs[currentRow].firstName = URLEncodedFormat(getUser.first_name)>
<cfset recs[currentRow].lastName = URLEncodedFormat(getUser.last_name)>
</cfloop>
<cfset cfcResults.status = "200">
<cfset cfcResults.data = recs>
<cfelse>
<cfset cfcResults.status = "400">
<cfset cfcResults.message = "Error">
</cfif>
<cfreturn cfcResults>
</cffunction>
</cfcomponent>
我想知道我现在如何使用这些数据并在我的javascript函数中循环?在这种情况下,创建JSON的最佳方法是什么?
答案 0 :(得分:2)
<cffunction name="getRecs" access="remote" returntype="any" returnFormat="JSON">
<cfreturn cfcResults>
</cffunction>
JSON不是有效的returnType。请参阅CFFunction documentation。你想要returnFormat="JSON"
。
如果你有ColdFusion代码并执行<cfset myVar = getRecs()/>
那么myVar
的值将是一个结构。如果您对getRecs
进行远程调用,ColdFusion将以指定的返回格式将数据返回给远程调用方。
无需额外做任何事情或手动序列化。
returnformat - 将值返回给远程调用者的格式。这个 属性对返回给本地调用者的值没有影响。
以下值有效:
json :在返回之前将返回值序列化为JSON格式 远程。
wddx :在远程返回之前将返回值序列化为WDDX格式。
plain :确保返回值是一种类型 ColdFusion可以直接转换为字符串,并返回 没有序列化的字符串值。有效类型包括所有简单 类型,例如数字和XML对象。如果返回值是a 复杂类型,如数组或二进制值,ColdFusion 生成错误。如果指定
returntype
属性,则为其值 必须是any, boolean, date, guid, numeric, string, uuid, variablename
, 或XML
;否则,ColdFusion会生成错误。默认情况下, ColdFusion序列化所有返回类型(包括简单返回 除了XML之外,它们转换为WDDX格式,并以XML格式返回XML数据 文本。您还可以使用
returnformat
作为HTTP请求参数 调用远程CFC功能。此参数具有相同的效果returnformat
属性并覆盖任何returnformat
属性 cffunction标记中指定的值。