$.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 类型的数据的主要内容,如果未能解决你的问题,请参考以下文章

Struts2+Jquery实现ajax并返回json类型数据

AJAX 跨域请求 - JSONP获取JSON数据

AJAX 跨域请求 - JSONP获取JSON数据

AJAX跨域请求JSONP获取JSON数据的实例代码

ajax请求json数据返回啥类型

springmvc怎么得到ajax传入json数据类型