1

我已经尝试了很多不同的选项来在不使用 jquery 的情况下将 json 数据发送到 cfc,我的问题是如何使用 XMLHttpRequest() 而不是 $.ajax 来完成?它将请求发送到 CFC,但我无法将任何变量传递给它一直说“FORMDATA”(我没有传入)的 cfc,我有一个名为表单数据的变量。我能够让它工作的唯一方法是使用新的 formData() 对象,但我需要它在 IE 8 和 9 中工作?

  <cfcomponent>

    <cffunction name="validate" access="remote" >

        <cfargument name="formdata" required="true" type="string"/>

        <!--- <cfif isJSON(arguments.formdata)>
            <cfset values = deserializeJSON(arguments.formdata)>
        </cfif> --->
        <cfdump var="#variables#">
        <cfdump var="#arguments#">

        <cfreturn { STATUS = 200, MESSAGE = "data recieved"}>

    </cffunction>

</cfcomponent>

这是我的 javascript

         var xhr = new XMLHttpRequest();
         xhr.open("POST", "validation.cfc?method=validate", true);
         xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');

          // send the collected data as JSON
         xhr.send(JSON.stringify({formdata:data}));

         xhr.onloadend = function () {
            console.log(xhr.responseText);
         };

我不确定我做错了什么?

4

2 回答 2

2

您需要发送表单编码数据以使其处于FORM范围内(arguments在远程调用 CFC 函数的情况下)。因此将内容类型更改为:

xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

并将 send() 调用更改为:

xhr.send("formdata=" + JSON.stringify(data));

它应该作为 JSON 字符串传递给arguments.formdata参数。

于 2013-10-22T19:55:17.367 回答
0
        var params = "method=validate&returnformat=json";
        params += "&formdata=" + json;

        $http({
               method: 'POST', 
               url: 'validation.cfc', 
               data:params, 
               headers: {"Content-type":"application/x-www-form-urlencoded"}
        }).success(function(data){

            console.log(data);

        })
于 2013-10-22T21:08:50.523 回答