Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从cfc页面返回数据?_Javascript_Ajax_Coldfusion - Fatal编程技术网

Javascript 如何从cfc页面返回数据?

Javascript 如何从cfc页面返回数据?,javascript,ajax,coldfusion,Javascript,Ajax,Coldfusion,我有一个项目,我想使用标准的Javascript Ajax调用从我的.cfc页面获取数据。后来我使用了JQuery,现在我想看看有什么不同。因此,在用户单击下拉菜单(onChnage函数)并在该函数中传递参数后,会触发我的javascript代码。然后我调用了Ajax,到目前为止,在这一部分中一切都很好。现在我将方法和参数发送到.cfc页面,其中是我的Coldfusion函数。在这里,我定义了我的绘图,并使用了cfquery。所以我的问题是如何创建JSON结构并返回Javascript函数,在这

我有一个项目,我想使用标准的Javascript Ajax调用从我的.cfc页面获取数据。后来我使用了JQuery,现在我想看看有什么不同。因此,在用户单击下拉菜单(onChnage函数)并在该函数中传递参数后,会触发我的javascript代码。然后我调用了Ajax,到目前为止,在这一部分中一切都很好。现在我将方法和参数发送到.cfc页面,其中是我的Coldfusion函数。在这里,我定义了我的绘图,并使用了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();
}
函数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
    , 或
    XML
    ;否则,ColdFusion将生成一个错误。默认情况下, ColdFusion序列化所有返回类型(包括简单返回 类型),转换为WDDX格式,并以XML形式返回XML数据 文本

您还可以在以下情况下使用
returnformat
作为HTTP请求参数: 调用远程CFC函数。此参数的效果与
returnformat
属性,并覆盖任何
returnformat
属性 cffunction标记中指定的值


尝试过探索吗?是的,但我还没有尝试过。规则#1-在第一次验证函数是否在CF中实际工作之前,不要从JS调用任何CFC;-)FWIW,对于远程方法,您还可以从函数签名中省略returnFormat,而在调用函数时通过URL参数指定所需的格式:
?returnFormat=json
。浓缩咖啡-虽然在技术上是可选的,但为了清晰起见,函数签名应该包括
返回类型
(与返回格式不同)。我通常喜欢包括类型和所有内容,因此如果我想在本地使用函数,我知道它的用途、作用等。