Javascript 如何从cfc页面返回数据?
我有一个项目,我想使用标准的Javascript Ajax调用从我的.cfc页面获取数据。后来我使用了JQuery,现在我想看看有什么不同。因此,在用户单击下拉菜单(onChnage函数)并在该函数中传递参数后,会触发我的javascript代码。然后我调用了Ajax,到目前为止,在这一部分中一切都很好。现在我将方法和参数发送到.cfc页面,其中是我的Coldfusion函数。在这里,我定义了我的绘图,并使用了cfquery。所以我的问题是如何创建JSON结构并返回Javascript函数,在这里我可以循环遍历元素?以下是我的Ajax调用:Javascript 如何从cfc页面返回数据?,javascript,ajax,coldfusion,Javascript,Ajax,Coldfusion,我有一个项目,我想使用标准的Javascript Ajax调用从我的.cfc页面获取数据。后来我使用了JQuery,现在我想看看有什么不同。因此,在用户单击下拉菜单(onChnage函数)并在该函数中传递参数后,会触发我的javascript代码。然后我调用了Ajax,到目前为止,在这一部分中一切都很好。现在我将方法和参数发送到.cfc页面,其中是我的Coldfusion函数。在这里,我定义了我的绘图,并使用了cfquery。所以我的问题是如何创建JSON结构并返回Javascript函数,在这
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();
}
函数myFunction(userNum){
var xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=函数(){
if(xmlhttp.status==200){
console.log(xmlhttp.responseText)
var data=JSON.parse(xmlhttp.responseText);
对于(变量i=0;i
所以在上面的函数中,我有一个关于发送url参数的问题。最好的方法是在我的函数中还是在xmlhttp.send()中?如果是,有什么区别?我还应该检查状态“200”的方式,还是可以通过其他方式进行检查?
这是我的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>
选择用户id、名字、姓氏
来自用户
其中,用户\u id=
按姓氏订购
我想知道现在如何使用这些数据并在javascript函数中循环?在这种情况下,创建JSON的最佳方法是什么
<cffunction name="getRecs" access="remote" returntype="any" returnFormat="JSON">
<cfreturn cfcResults>
</cffunction>
JSON不是有效的返回类型。看。您需要returnFormat=“JSON”
如果您使用ColdFusion代码并执行
,则myVar
的值将是一个结构。如果对getRecs
ColdFusion执行远程调用,则会以指定的返回格式将数据返回给远程调用方
无需执行任何额外操作或手动序列化
returnformat-用于向远程调用方返回值的格式。这
属性对返回给本地调用方的值没有影响
以下值有效:
- json:在返回返回值之前将其序列化为json格式 远地
- wddx:在远程返回之前,将返回值序列化为wddx格式
- 普通:确保返回值是一个类型
ColdFusion可以直接转换为字符串,并返回
没有序列化的字符串值。有效类型包括所有简单类型
类型,例如数字和XML对象。如果返回值为
复杂类型,如数组或二进制值,ColdFusion
生成一个错误。如果指定
属性,则其值 必须是returntype
, 或any、布尔值、日期、guid、数字、字符串、uuid、variablename
;否则,ColdFusion将生成一个错误。默认情况下, ColdFusion序列化所有返回类型(包括简单返回 类型),转换为WDDX格式,并以XML形式返回XML数据 文本XML
returnformat
作为HTTP请求参数:
调用远程CFC函数。此参数的效果与
returnformat
属性,并覆盖任何returnformat
属性
cffunction标记中指定的值
尝试过探索吗?是的,但我还没有尝试过。规则#1-在第一次验证函数是否在CF中实际工作之前,不要从JS调用任何CFC;-)FWIW,对于远程方法,您还可以从函数签名中省略returnFormat,而在调用函数时通过URL参数指定所需的格式:
?returnFormat=json
。浓缩咖啡-虽然在技术上是可选的,但为了清晰起见,函数签名应该包括返回类型
(与返回格式不同)。我通常喜欢包括类型和所有内容,因此如果我想在本地使用函数,我知道它的用途、作用等。