我如何使用JQuery发布JSON数据?
我想将Json发布到同一台服务器上的Web服务。 但我不知道如何使用JQuery发布Json。 我已经试过这个代码:
$.ajax({ type: 'POST', url: '/form/', data: {"name":"jonas"}, success: function(data) { alert('data: ' + data); }, contentType: "application/json", dataType: 'json' });
但是使用这个JQuery代码,服务器上的Json数据不会被接收到。 这是服务器上的预期数据: {"name":"jonas"}
但使用JQuery服务器接收name=jonas
。 换句话说,这是“urlencoded”数据而不是Json。
有没有办法以Json格式发布数据,而不是使用JQuery的urlencoded数据? 或者我必须使用手动ajax请求?
你正在传递一个对象, 而不是一个JSONstring。 当你传递一个对象时,jQuery使用$.param
将对象序列化为名称 – 值对。
如果您将数据作为string传递,则不会被序列化:
$.ajax({ type: 'POST', url: '/form/', data: '{"name":"jonas"}', // or JSON.stringify ({name: 'jonas'}), success: function(data) { alert('data: ' + data); }, contentType: "application/json", dataType: 'json' });
基于寂寞的回答,我创build了一个包装某些参数的jpost
。
$.extend({ jpost: function(url, body) { return $.ajax({ type: 'POST', url: url, data: JSON.stringify(body), contentType: "application/json", dataType: 'json' }); } });
用法:
$.jpost('/form/', { name: 'Jonh' }).then(res => { console.log(res); });
使用Promise
并检查body
对象是否是有效的JSON。 如果没有承诺reject
将被退回。
var DoPost = function(url, body) { try { body = JSON.stringify(body); } catch (error) { return reject(error); } return new Promise((resolve, reject) => { $.ajax({ type: 'POST', url: url, data: body, contentType: "application/json", dataType: 'json' }) .done(function(data) { return resolve(data); }) .fail(function(error) { console.error(error); return reject(error); }) .always(function() { // called after done or fail }); }); }