$.ajax 不允许发布 json 类型的数据
Posted
技术标签:
【中文标题】$.ajax 不允许发布 json 类型的数据【英文标题】:$.ajax is not allowing to post data of json type 【发布时间】:2017-12-15 12:04:20 【问题描述】:我有一个休息 URL,我需要在其中发布一些 JSON 数据,它会给出如下截图所示的响应
现在我需要在我的应用程序中使用 $http 或 $.ajax 来使用它。我使用了 $.ajax,如下所示
var postdata = //whole jsonobject which is der in above screenshot
$.ajax(
url: "http://10.11.13.153:8081/fro?assettype=00000000-0000-0000-0000-000000031026",
type: 'post',
data: postdata,
dataType: 'json',
success: function (data)
console.log("response ",JSON.stringify(data));
);
但是为此我得到 200 响应,但我没有看到成功函数中的响应。
在网络选项卡中,我看到以下响应
terms%5Bitems%5D%5B0%5D%5B_type%5D=term&terms%5Bitems%5D%5B0%5D%5B_id%5D=6662c0f2.e1b1ec6c.1mdln1e8h.0ibdeqc.s1nm3u.vbt90ta1civ5asp5qetu5&terms%5Bitems%5D%5B0%5D%5B_url%5D=https%3A%2F%2F10.11.13.155%3A9445%2Fibm%2Fiis%2Figc%2F%23dossierView%2F6662c0f2.e1b1ec6c.1mdln1e8h.0ibdeqc.s1nm3u.vbt90ta1civ5asp5qetu5&terms%5Bitems%5D%5B0%5D%5B_name%5D=Export_02
不是 JSON 格式,也不是预期的。
下面是 N/w 标签页标题的截图
为什么在我的请求标头中看到 form-urlencoded 类型?
我知道默认情况下需要。那怎么改,让它取application/json呢?
也作为尝试而不是 JSON 作为我更改为的数据类型
datatype:'html'
那么这一次我得到了与上面相同的响应,但这次它在成功函数中得到了安慰。为什么这样?在这里可以做些什么来获得 JSON 格式的预期响应。或者任何需要在服务器端添加的标头。请帮助或想法
【问题讨论】:
你可以尝试使用数据:Json.stringfy(postdata)success: function (data) console.log("response ",JSON.stringify(responsedata));
您的成功函数将您的数据返回为data
,但您尝试控制台.log responsedata
@Zaphiel 对不起,我没有注意到只是错字......即使数据也没有得到安慰
"var postdata = //whole jsonobject which is der in above screenshot
" 这不是“JSON 对象”。那是一个对象。 JSON 是一种用于数据交换的文本符号。 (More here.) 如果您正在处理 javascript 源代码,而不是处理 字符串,那么您就不是在处理 JSON。
【参考方案1】:
反常的是,dataType
不控制data
的类型;它告诉 jQuery 你希望得到什么类型的数据返回。 contentType
告诉 jQuery 您发送的数据类型。 (见the documentation。)当你设置contentType
时,你要确保你给jQuery的确实是那种格式。
因此,在您的情况下,您需要设置 contentType
并将对象字符串化(参见 ***
行):
var postdata = //whole jsonobject which is der in above screenshot
$.ajax(
url: "http://10.11.13.153:8081/fro?assettype=00000000-0000-0000-0000-000000031026",
type: 'post',
data: JSON.stringify(postdata), // ***
contentType: 'json', // ***
success: function (data)
console.log("response ",JSON.stringify(data));
);
(我还更改了success
的内容,因为您评论说使用responsedata
只是一个与问题无关的错字。)
如果您也希望返回 JSON,请确保响应具有正确的 Content-Type
标头。 (或者,作为二等选项,指定 dataType: "json"
以告诉 jQuery 它是 JSON,而不管服务器说什么。)
【讨论】:
以上是关于$.ajax 不允许发布 json 类型的数据的主要内容,如果未能解决你的问题,请参考以下文章