【问题标题】:AJAX returns null?AJAX返回null?
【发布时间】:2012-09-30 16:17:50
【问题描述】:

我正在尝试使用 ajax 从我的服务器获取信息。页面 xxx.php 是一个只有 123 的页面。但是,当我想返回该页面的内容时,它返回 null。

function myFunct(){
    $.ajax({
        url: 'xxx.php',
        success: function(data) {
            return data;
        }
    });
}

var data = myFunct(); //nothing.

【问题讨论】:

  • 欢迎来到 async 的精彩世界!你不能那样做。
  • 那我该怎么办?编辑:好的,我明白了。谢谢。
  • 为什么每个答案都是错误的?人们现在不应该知道如何回答这个问题吗?
  • 哪个是? TJ- 解决方案似乎有效..
  • 我没有注意到那个答案。他没有告诉你把回调放在哪里。

标签: jquery ajax


【解决方案1】:

请注意,ajax 是“异步的”。因此,当 myFunct() 完成执行时,可能不会收到对服务器调用的响应。 您可以将处理来自服务器调用的数据的逻辑放在 ajax 的“成功”中。

function myFunct(){
    $.ajax({
        url: 'xxx.php',
        success: function(data) {
           // processMyData(data);
        }
    });
}

【讨论】:

  • 不客气。请在您的问题中查看我的评论以及为什么使用@SLaks 答案可能会更好(取决于您的用例)。
【解决方案2】:

AJAX 是异步的

您只会在其余代码完成运行后的某个时间收到响应。

相反,您需要使用回调返回值,就像$.ajax 所做的那样:

function myFunct(callback){
    $.ajax({
        url: 'xxx.php',
        success: function(data) {
            // Do something to the data...
            callback(data);
        }
    });
}

myFunct(function(result) {
    ...
});

【讨论】:

  • 为什么要创建另一个匿名函数?你可以直接写success: callback,因为它直接将data作为参数。
  • 大家好。这是最好的解决方案,前提是您应用了@MihaiStancu 提供的额外解决方案
【解决方案3】:

您可以在同步模式下使用(尽管建议使用异步回调以避免“冻结”代码)。

使用同步:

function myFunct(callback){
   return $.ajax({
        url: 'xxx.php',
        async: false
    }).responseText;
}

【讨论】:

  • 很有创意。一位出色的架构师曾经说过,在性能需要之前不要使用异步。
  • 主线程上的同步 XMLHttpRequest 已被弃用,因为它会对最终用户的体验产生不利影响。如需更多帮助,请查看xhr.spec.whatwg.org
  • @MohanPrasad 问题和答案都是旧的(2012 年,4 年前)而且无论如何在我面向的时候:尽管建议使用异步回调以避免“冻结”代码
  • 避免使用同步模式,它在 Chrome 中已经不起作用,其他浏览器将很快不支持。
【解决方案4】:
var globalVal;

    function myFunct(){
        $.ajax({
            url: 'xxx.php',
            success: function(data) {
                alert(data); // you can see you data
                globalVal= data;
            }
        });
    }

// 它是对服务器的响应,响应执行稍晚一点,您分配值

myFunct(); //nothing.
alert(globalVal) 

【讨论】:

  • 如果你需要使用“数据”,你可以将它传递给成功的函数
  • 'alert(globalVal)' 可能不会显示预期的数据。它将在 myFunct() 之后立即执行。响应可能会在很久以后收到。
  • ajax请求成功后可以一次性使用:function(data){ USE_MY_DATA(data)}
【解决方案5】:

尝试使用 ajax 错误处理来检查您的响应

function myFunct(){
$.ajax({
    url: 'xxx.php',
    success: function(data) {
        alert(data);
    },
    error:  function(jqXHR, textStatus){
       alert("Status: "+ jqXHR.status);
       alert("textStatus: " + textStatus);
    }

});

}

【讨论】:

  • 他说它会成功,但“数据”将为空,因此;该错误是多余的,不需要。
猜你喜欢
  • 2011-01-09
  • 2013-11-12
  • 2022-06-11
  • 1970-01-01
  • 2016-03-31
  • 2015-05-04
  • 2015-11-27
  • 2014-05-17
相关资源
最近更新 更多