【问题标题】:Cannot get xmlhttprequest.responseText from JQuery无法从 JQuery 获取 xmlhttprequest.responseText
【发布时间】:2011-02-21 05:21:02
【问题描述】:

我是 JQuery 的新手。

我有这个功能

function verify_at_bd() {
  var u = "foo";
  var p = "bar";

  return $.post('auth.php', {
      name: u,
      password: p,
      mobile: ''
    },
    function(result) {
      return result;
    }, 'json');
}

如果我执行console.log(verify_at_bd()),我会收到一个 xmlhttprequest 但无法访问 responseText 属性。我在 PHP 脚本中使用header("Content-Type: application/json")

我在 OS X 上使用 Firefox 3.6。

【问题讨论】:

  • 这段代码存在结构缺陷:函数永远不会产生结果,因为 $.post 是异步的。如果你包含调用 verify_at_bd 函数的代码,有人可能会告诉你如何让它工作。

标签: javascript jquery json xmlhttprequest


【解决方案1】:

首先,XHR 必须处于 readyState 4 才能获取 responseText。

其次,在我看来你在滥用 $.post()。这是一个异步调用,你不处理$.post()的结果,你在你的success方法(function(result))中处理结果。

如果你真的需要响应文本,那么在你的成功函数中添加更多参数并在那里捕获 xhr。

查看 jquery 文档以获取 $.post 以查看哪个 arg 是 xhr。

【讨论】:

    【解决方案2】:

    这里是:

    $.ajax({
      type: 'POST',
      url: 'auth.php',
      data: {name: 'foo', password: 'bar', mobile: ''},
      success: function(result, textStatus, xmlhttprequest){
            console.log( $.parseJSON(xmlhttprequest.responseText).status);
        },
      dataType: 'json'
    });
    

    就是这样。

    【讨论】:

      【解决方案3】:

      正如@code poet 所说,您正在以一种尴尬的方式使用$.post 方法。这是一个异步调用,因此在 AJAX POST 请求完成之前,您不能期望立即看到返回给您的结果。如果您可以发布您编写的代码来处理您希望此 function 返回的 JSON,那么建议您以正确的方式构建您的 $.post 响应会更容易。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-25
        • 2012-11-12
        • 2021-05-18
        • 2012-10-10
        • 1970-01-01
        • 1970-01-01
        • 2017-11-17
        • 1970-01-01
        相关资源
        最近更新 更多