$ .ajax不允许发布json类型的数据

时间:2017-07-11 12:13:49

标签: javascript jquery angularjs json ajax

我有一个休息网址,我需要发布一些JSON数据,它会给出一个响应,如下面的截图

enter image description here

现在我需要使用$ 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标签中标题的屏幕截图

enter image description here

在我的请求标题中,为什么我会看到form-urlencoded类型?

我明白这是默认的。然后如何更改并使其成为application / json?

同样作为尝试而不是JSON作为数据类型,我改为

datatype:'html'

然后这次我得到与上面相同的回复,但这次它在成功功能中得到了安慰。为什么这样?这里可以做什么来获得JSON格式的预期响应。或者需要在服务器端添加的任何标头。请帮助或想法

1 个答案:

答案 0 :(得分: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,无论服务器说什么。)