如何使用$.ajax发送JSON而不是查询字符串?
问题的原因是这个人的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 });
希望这个问题的解决方法能对你有所帮助!
如何使用$.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的重要部分。
问题的原因是发送的请求使用的是查询字符串(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而不是查询字符串的解决方法。