如何使用JQuery发布JSON数据?

Jon*_*nas 68 ajax jquery post json http-post

我想将Json发布到同一台服务器上的Web服务.但我不知道如何使用JQuery发布Json.我尝试过这段代码:

$.ajax({
    type: 'POST',
    url: '/form/',
    data: {"name":"jonas"},
    success: function(data) { alert('data: ' + data); },
    contentType: "application/json",
    dataType: 'json'
});
Run Code Online (Sandbox Code Playgroud)

但是使用这个JQuery代码,数据不会在服务器上作为Json接收.这是服务器上的预期数据:{"name":"jonas"}但是使用服务器接收的JQuery name=jonas.或者换句话说,它是"urlencoded"数据,而不是Json.

有没有办法使用JQuery以Json格式发布数据而不是urlencoded数据?或者我是否必须使用手动ajax请求?

lon*_*day 131

您传递的是对象,而不是 JSON字符串.传递对象时,jQuery使用$.param序列化对象为名称 - 值对.

如果将数据作为字符串传递,则不会序列化:

$.ajax({
    type: 'POST',
    url: '/form/',
    data: '{"name":"jonas"}', // or JSON.stringify ({name: 'jonas'}),
    success: function(data) { alert('data: ' + data); },
    contentType: "application/json",
    dataType: 'json'
});
Run Code Online (Sandbox Code Playgroud)

  • @ user3746259为什么要使用`$ .post`?它是(a)只有`$ .ajax`的包装器和(b)无法完成这里所需要的(即`contentType`属性). (15认同)
  • 直到,你知道,jQuery 3,即现在仍然是*现在*,没关系这个答案是在四年前编写的*. (5认同)
  • 请使用$ .post代替$ .ajax. (3认同)

Nin*_*ham 8

根据lonesomeday的回答,我创建了一个jpost包含某些参数的东西.

$.extend({
    jpost: function(url, body) {
        return $.ajax({
            type: 'POST',
            url: url,
            data: JSON.stringify(body),
            contentType: "application/json",
            dataType: 'json'
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

用法:

$.jpost('/form/', { name: 'Jonh' }).then(res => {
    console.log(res);
});
Run Code Online (Sandbox Code Playgroud)