2013-10-22 109 views
1

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

<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

标题不代表您真正的问题。 –

+0

我很抱歉我重新写了标题 – Jesse

回答

1

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

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

,改变在send()调用:

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

,它应该作为一个JSON字符串到arguments.formdata参数来通过。

+0

这是一个很好的方式来做到这一点谢谢我其实我也做了它与角js – Jesse

+0

哈哈好吧,你说没有jquery所以我认为你的意思是没有任何类型的图书馆B/C你只限于由于某种原因,普通的ol'js。 :) –

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); 

     }) 
相关问题