如何使用$.ajax发送JSON而不是查询字符串?

20 浏览
0 Comments

如何使用$.ajax发送JSON而不是查询字符串?

有人能够简单地解释一下如何让jQuery发送真正的JSON而不是查询字符串吗?\n

$.ajax({
    url      : url,
    dataType : 'json', // 我很确定这会起作用
    data     : data,
    type     : 'POST',
    complete : callback // 等等
});

\n实际上,这将会将你精心准备的JSON转换成查询字符串。其中一个令人讨厌的事情是,你对象中的任何array: []将会被转换成array[]: [],可能是因为查询字符串的限制。

0
0 Comments

问题的原因是这个人的http请求是由IBM的CGI API处理的,这些请求是跨域的,所以使用了jsonp来发送ajax请求。然而,他希望发送的是JSON而不是查询字符串。他的解决方法是将要发送的数据放在一个JavaScript对象中,然后将这个对象作为参数传递给$.ajax的data属性。最后,将dataType设置为'jsonp',以确保返回的数据是JSONP格式。

以下是这个问题的解决方案的代码:

var data = {
    USER: localProfile,
    INSTANCE: "HTHACKNEY",
    PAGE: $('select[name="PAGE"]').val(),
    TITLE: $("input[name='TITLE']").val(),
    HTML: html,
    STARTDATE: $("input[name='STARTDATE']").val(),
    ENDDATE: $("input[name='ENDDATE']").val(),
    ARCHIVE: $("input[name='ARCHIVE']").val(),
    ACTIVE: $("input[name='ACTIVE']").val(),
    URGENT: $("input[name='URGENT']").val(),
    AUTHLST: authStr
};
$.ajax({
    type: "POST",
    url: "http://www.domian.com/webservicepgm?callback=?",
    data: data,
    dataType: 'jsonp'
}).done(function(data) {
    // handle data.WHATEVER
});

希望这个问题的解决方法能对你有所帮助!

0
0 Comments

如何使用$.ajax发送JSON而不是查询字符串?

问题的原因:$.ajax方法的dataType选项是用于解析接收到的数据,而不是用于指定发送的数据类型。因此,如果想要发送JSON数据而不是查询字符串,就需要自己使用JSON.stringify方法将数据转换为字符串,并设置processData选项为false。

解决方法:使用以下代码发送JSON数据:

$.ajax({
    url: url,
    type: "POST",
    data: JSON.stringify(data),
    processData: false,
    contentType: "application/json; charset=UTF-8",
    complete: callback
});

需要注意的是,并非所有的浏览器都支持JSON对象,尽管jQuery有.parseJSON方法,但并不包含字符串化方法。因此,如果需要兼容不支持JSON对象的浏览器,需要使用另外的polyfill库。

设置processData为false并不是必需的,因为JSON.stringify已经返回了一个字符串。这样做不会导致请求失败,因为已经是一个字符串了。

另外,关于指定响应类型的问题,如果服务器端已经提供了content-type头,那么在客户端就不需要再指定了。jQuery会根据响应的MIME类型来推断响应类型。只有在服务器未提供content-type头时,才需要在客户端指定响应类型。

以上是使用JQuery 1.9版本时,设置processData为false并使用JSON.stringify的重要部分。

0
0 Comments

问题的原因是发送的请求使用的是查询字符串(query string)而不是JSON格式。解决方法是使用`JSON.stringify`将对象序列化为JSON字符串,并指定`contentType`为`application/json`。

具体做法是使用`$.ajax`函数发送POST请求,其中`data`参数使用`JSON.stringify`将数据对象转换为JSON字符串,`contentType`参数设置为`application/json`。

需要注意的是,如果需要支持旧版本的浏览器,可以使用`json2`库来兼容。另外,不需要在`contentType`中指定字符集,因为jQuery会默认使用UTF-8字符集。

在服务器端,如果使用`print_r`打印`$_POST`数组,会发现为空,但是Ajax请求显示已经发送了7个JSON项。这是因为在PHP中,只能通过`file_get_contents("php://input")`方法获取JSON数据,然后再使用`json_decode()`解析。

总结起来,发送JSON而不是查询字符串的解决方法如下:

$.ajax({
    url: url,
    type: "POST",
    data: JSON.stringify(data),
    contentType: "application/json",
    complete: callback
});

以上是关于如何通过`$.ajax`发送JSON而不是查询字符串的解决方法。

0