jQuery ajax返回readyState 1或不正确的数据类型

时间:2015-08-21 08:30:30

标签: javascript jquery ajax json wordpress

我为Wordpress插件编写脚本,并且遇到ajax响应问题。当我想要获取json文件时,jQuery.ajax返回{readyState: 1}。 带有async: false的jQuery.ajax返回纯文本,但我有dataType: 'json'

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时,在控制台中我有一个带有键“responseText”的对象和来自json文件的纯文本结果但是我无法得到这个键值,当函数是异步时,返回的是对象,我可以得到结果,但它是一个纯文本,虽然我有dataType:'json'。

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

1 个答案:

答案 0 :(得分:3)

Ajax调用返回promise,因此您必须使用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;
});