Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery在.done()函数中解析JSON_Javascript_Jquery_Json - Fatal编程技术网

Javascript jQuery在.done()函数中解析JSON

Javascript jQuery在.done()函数中解析JSON,javascript,jquery,json,Javascript,Jquery,Json,我知道使用jQuery解析JSON有一个快捷方式,比如 $.post('myPhpFile.php', postData, function(data){ console.log(data.status) // "OK" },'json'); 但我真的很讨厌anon函数,也很讨厌每次都要手动解析JSON。我希望我能做到这一点(因为我不总是用同样的数据做同样的事情) 但是在.done()中,我必须首先使用$.parseJSON(数据),我有很多小函数,它们突出返回$.posts 是否有其他

我知道使用jQuery解析JSON有一个快捷方式,比如

$.post('myPhpFile.php', postData, function(data){
   console.log(data.status) // "OK"
},'json');
但我真的很讨厌anon函数,也很讨厌每次都要手动解析JSON。我希望我能做到这一点(因为我不总是用同样的数据做同样的事情)

但是在.done()中,我必须首先使用$.parseJSON(数据),我有很多小函数,它们突出返回$.posts

是否有其他快捷方式或良好的功能方式仍然可以返回延迟对象$.post并用json解析数据?我想到

function getSomeData(phpFile, postData){
    var defer = $.Deferred();
    $.post(phpFile, postData, function(data){
      defer.resolve(data);
   },'json');
   return defer.promise(data);
}

但我是强迫症患者,现在我有两个延期。只是想知道是否有更好的方法。

如果您想传递
json
数据类型字段,但想使用承诺而不是匿名回调,只需传递回调的
null

从:

在请求成功时执行的回调函数。如果提供了
数据类型
,则为必填项,但在这种情况下可以为
null

因此,您只需要:

function getSomeData(phpFile, postData) {
    return $.post(phpFile, postData, null, 'json');
}

当然,如果您的服务器使用适当的
内容类型:
字段进行响应,那么JQuery很乐意猜测数据类型。

如果您只是想包装参数并返回一个可以链接到的对象,请包装一个标准的ajax调用

function post(phpFile, postData){
    return $.ajax({
      type: "POST",
      url: phpFile,
      data: postData,
      dataType: 'json'
    });
}

post('myPhpFile.php', postData,).done(function(function(data){
   console.log(data.status)
});

是的,有更好的办法。创建额外的延迟对象是一种常见的jQuery承诺反模式。注意:在第二个代码段中,
getSomeData
没有被调用
.done()
将用作函数本身的方法,而不是其返回值。这是打字错误吗?嗯。。。习惯了便利函数,忘记了原来的函数。@tdoakiiii
$。尽管如此,post
仍能满足您的要求。@Alnitak是的,使用
null
回调将有效。我只是不喜欢它看起来的样子。@Tyrsius好吧,那只是不必要的挑剔,IMHO;-)@我想是阿尔尼塔克;虽然“让代码看起来漂亮”是这个网站的一半内容=)
function post(phpFile, postData){
    return $.ajax({
      type: "POST",
      url: phpFile,
      data: postData,
      dataType: 'json'
    });
}

post('myPhpFile.php', postData,).done(function(function(data){
   console.log(data.status)
});