有没有办法使用XMLHttpRequest()将json发送到远程cfc?

时间:2013-10-22 16:41:04

标签: javascript ajax json coldfusion

我尝试了很多不同的选项,在不使用jquery的情况下将json数据发送到cfc,我的问题是如何使用XMLHttpRequest()而不是$ .ajax来完成?它将请求发送到CFC,但我不能将任何变量传递给cfc,它一直说“FORMDATA”(这是我没有传入),我有一个名为表单数据的变量。我能够让它工作的唯一方法是使用新的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);
         };

我不确定我做错了什么?

2 个答案:

答案 0 :(得分:1)

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

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

并将send()调用更改为:

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

它应该作为arguments.formdata参数的JSON字符串。

答案 1 :(得分: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);

        })