在将$ .post与promises一起使用时,在哪里指定" json"

时间:2018-01-21 22:47:19

标签: javascript jquery ajax callback

使用$ .post调用promises的正确方法是什么,同时仍然指定数据类型" json" ?

我做了一些测试,但得到了我不完全理解的结果。

1) 这样可以仅在$ .post:

中的函数内处理数据
$.post( "foo.net/api", {a: "this", b: "that"}, function(data){
  $('body').html(data);
}, "json");

2) 这将返回格式错误的数据,仅在.done:

中的函数内处理数据
$.post( "foo.net/api", {a: "this", b: "that"}, "json")

.done(function(data){
  $('body').html(data);
});

3) 这似乎也有效,在post中处理数据然后在.done中处理数据:

$.post( "foo.net/api", {a: "this", b: "that"}, function(data){
  $('body').html(data);
}, "json")

.done(function(data){
  $('body').append(data);
};

4) BIZARRELY(至少对我来说)这也有效,在帖子中有一个空函数,然后处理完成内的数据:

$.post( "foo.net/api", {a: "this", b: "that"}, function(){
  // empty function
}, "json")

.done(function(data){
  $('body').html(data);
};

最后一次测试让我很困惑。为什么post中的空函数允许.done访问并使用json数据类型?虽然没有函数(如第二个例子中所示)留下.done与未格式化的输出?

那么如何指定" json"数据类型是否正确?

谢谢。

1 个答案:

答案 0 :(得分:0)

数据类型将是post函数的最后一个参数

$.post( "test.php", { name: "John", time: "2pm" }, 'json')
  .done(function( data ) {
    // do something with response data
  })
  .always(function() {
    // do something afterwards
  });