2015-08-21 63 views
2

我为Wordpress插件编写脚本,并有Ajax响应问题。当我想要得到json文件时,jQuery.ajax返回{readyState: 1}。 jQuery.ajax与async: false返回纯文本,虽然我有dataType: 'json'jQuery ajax返回readyState 1或不正确的数据类型

App.Language = { 

    GetLanguageFile: function(lang) { 
     var LangFile = GetJsonLanguageFile(lang); 
     return LangFile; 
    }, 

} 

function GetJsonLanguageFile(lang) { 
    var json = $.ajax({ 
     url: ajaxurl, 
     type: 'POST', 
     dataType: 'json', 
     // async: false, 
     data: {action:'adminajax',method:'GetJsonLanguageFile',language: lang}, 
    }) 

    return json; 
} 

当函数返回的readyState:1,在控制台我有对象从JSON文件密钥“responseText的”和纯文本的结果,但我不能让这个键值,当函数是异步,返回的对象我可以得到结果,但它是一个纯文本,虽然我有dataType:'json'。

我做错了什么?如何从这个json文件内容制作普通的对象?

+0

当'async'是假的,你没有得到一个jQXHR对象'$阿贾克斯返回“,这是你的意思? – vard

+0

不,async为false时函数返回具有正确responseText的对象。我不想用async false – Damian

+0

好吧,现在用async false,$ .ajax返回json对象。我必须在json文件中更改'to',但仍然无法正常工作false – Damian

回答

3

Ajax调用返回的承诺,所以你必须使用done menthod与结果的工作,例如:

function GetJsonLanguageFile(url, lang) { 
     return $.ajax({ 
      url: url, 
      type: 'POST', 
      dataType: 'json', 
      // async: false, 
      data: {action:'adminajax',method:'GetJsonLanguageFile',language: lang}, 
     }); 
} 

GetJsonLanguageFile('some.url', lang).done(function(data) { 
    // if it returns string insted of JSON try it: 
    data = $.parseJSON(data); 
    // do rest 
    // window.json = data; 
}); 
+0

完成函数不返回任何内容 – Damian

+0

因为不能返回它,所以如果要将它取出到函数体外,必须将其绑定到全局变量,例如'window.json = data;'但是,你应该在函数体内做所有的事情 – edrw

+0

这实际上是一个很好的AJAX包装器的候选者,即使不需要弃用'asycn:false'谢谢,爱它 – wpcoder