我尝试了很多不同的选项,在不使用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);
};
我不确定我做错了什么?
答案 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);
})