jQuery - 如何通过Ajax发送PUT请求并传输JSON数据?

63

我正尝试使用jQuery通过Ajax将一些JSON格式的数据发送到服务器。我的代码如下:

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

但是在服务器端,我收到一个字符串data=mydata,而不是预期的JSON格式。 Firebug 也告诉我同样的信息。

错误出在哪里?


你在服务器端使用什么? - James Black
我使用期望JSON的Couchdb。 - Juri Glass
6
AJAX PUT在所有主要的浏览器中都可用,而HTTP PUT则不是。因此,在这种情况下,使用PUT是可以的(甚至建议使用)。 - Aleksandar Dimitrov
2
添加选项 dataType: "json" 可能会对你有所帮助。 - stefanlz
3个回答

54

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

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

或者,只需将你正在使用创建对象的代码直接作为文字字符串传递,但我想象这只是一个例子,你可能想要编码某个已经创建好的对象。


1
如果@Juri想在服务器上使用JSON,这是他应该走的路。我一直使用json2.js库,它非常好用。 - Doug Neiner
3
如果jQuery能像处理POST请求一样把数据转换成字符串就好了。 - neoneye

32

如果你的应用程序总是需要发送JSON,则可以在初始化某个位置执行以下代码,然后像你的示例中一样使用默认的$.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) {
},

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接