【问题标题】:jQuery ajax return readyState 1 or incorrect data typejQuery ajax 返回 readyState 1 或不正确的数据类型
【发布时间】:2015-08-21 08:30:30
【问题描述】:

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

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 文件内容中制作普通对象?

【问题讨论】:

  • async为false时,你没有得到一个jQXHR对象作为$.ajax return,这是你的意思吗?
  • 不,当 async 为 false 时,函数返回具有正确 responseText 的对象。我不想用 async false 得到这个
  • 好的,现在使用 async false,$.ajax 返回 json 对象。我不得不在 json 文件中将 ' 更改为 " 但如果没有 async false 仍然无法工作

标签: javascript jquery ajax json wordpress


【解决方案1】:

Ajax 调用返回 promise,因此您必须使用 done 方法来处理结果,例如:

 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;
});

【讨论】:

  • 因为你不能返回它,如果你想在函数体之外得到它,你必须将它绑定到全局变量,例如window.json = data;,但是你应该做所有的事情在函数体内。
  • 这实际上是 AJAX 包装器的绝佳候选者,即使不需要弃用 asycn:false 谢谢,喜欢它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-24
  • 2015-03-20
  • 1970-01-01
  • 2014-09-10
  • 1970-01-01
相关资源
最近更新 更多