2009-11-17 47 views
54

我试图通过Ajax将一些JSON格式的数据与jQuery加到服务器上。我的代码如下所示:jQuery - 如何通过Ajax放置JSON?

$.ajax({ 
    type: "PUT", 
    url: myURL, 
    contentType: "application/json", 
    data: {"data": "mydata"} 
}); 

但在服务器端,我得到的不是预期的一个JSON字符串data=mydata,。 Firebug告诉我一样。

错误在哪里?

+0

? – 2009-11-17 14:37:26

+0

我使用期望JSON的Couchdb。 – 2009-11-17 14:43:18

+6

AJAX PUT *可在所有主流浏览器中使用。 HTTP PUT不是。所以在这种情况下,使用PUT是很好的(推荐,甚至是)。 – 2013-07-02 19:39:37

回答

46

我认为数据需要是一个字符串。对象被转换为查询字符串,这就是你在这里看到的。

您可以使用JSON.stringify(obj)方法将您的对象转换为字符串。 JSON对象的代码可从:https://github.com/douglascrockford/JSON-js/blob/master/json2.js获取。

或者,只是传递您用来创建对象的代码作为文字字符串,但我想这只是一个示例,您需要编码您已创建的某个对象。

+1

这是@Juri应该去的方式,如果他想在服务器上使用JSON。我一直使用json2.js库,并且效果很好。 – 2009-11-17 14:41:07

+3

会很好,如果jQuery将字符串数据,就像它与POST一样。 – neoneye 2011-12-04 23:06:30

+1

更新后的链接:https://github.com/douglascrockford/JSON-js/blob/master/json2.js – Ben 2012-05-08 05:17:55

30

如果您始终必须在您的应用程序中发送JSON,那么您可以在init中的某处执行此操作,然后使用默认的$.ajax调用,并且它将始终序列化为JSON字符串而不是Ajax默认值请求参数。

这里我用上面提到的JSON对象:什么是你在服务器端使用

$.ajaxSetup({ 
    contentType : 'application/json', 
    processData : false 
}); 
$.ajaxPrefilter(function(options, originalOptions, jqXHR) { 
    if (options.data){ 
     options.data=JSON.stringify(options.data); 
    } 
}); 
1
//url: this is a reference to the XML, where you need to define the mapping. 
//<entry key="/getEmpDetails/transEfileGenerate.app"> 
//<bean class="com.adp.ems.framework.spring.MappingItem" p:delegate-ref="efilePageDelegate" 
//p:action="passJSONObjectAndGetWebServiceOutput" /> 

//str1 is the input JSON that you need to pass... Ajax will automatically take care to get the response. 
//</entry> 

var kw = { 
    url : "getEmpDetails/transEfileGenerate.app", 
    timeout : 30000, 
    handleAs : "json", 
    sync: false, 
    putData : str1, 
    headers: { "Content-Type": "application/json"}, 
    load : function(result) { 
},