Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JQuery—如何在ajax调用之外使用ajax调用的返回值_Jquery_Ajax - Fatal编程技术网

JQuery—如何在ajax调用之外使用ajax调用的返回值

JQuery—如何在ajax调用之外使用ajax调用的返回值,jquery,ajax,Jquery,Ajax,我有一个ajax电话。我将返回值(数据)放入一个名为mydata的变量中。我希望在ajax调用之外使用该变量。请注意,我不能将我的代码合并到ajax调用的成功部分。我不会详细说明原因,因为这会增加混乱。所以问题很简单。有没有办法在ajax调用之外使用ajax调用的返回值?提前感谢您的回复。干杯马克 $.ajax({ type: "POST", url: "file.php", data: ajaxData, success: function(data) {

我有一个ajax电话。我将返回值(数据)放入一个名为mydata的变量中。我希望在ajax调用之外使用该变量。请注意,我不能将我的代码合并到ajax调用的成功部分。我不会详细说明原因,因为这会增加混乱。所以问题很简单。有没有办法在ajax调用之外使用ajax调用的返回值?提前感谢您的回复。干杯马克

$.ajax({
    type: "POST",
    url: "file.php",
    data: ajaxData,
    success: function(data) {
        var mydata = data;    
    }
});

alert(mydata); // -> This is not working

简短回答:不行,因为AJAX中的A代表“异步”,所以脚本不会“等待”AJAX调用完成

如果需要,可以使用间隔轮询查看是否设置了mydata:

var mydata = null;

$.ajax({
    type: "POST",
    url: "file.php",
    data: ajaxData,
    success: function(data) {
        var mydata = data;    
    }
});

var timerId = setInterval(function() {
   if(mydata !== null) {
      // your code
      clearInterval(timerId);
   }
}, 1500); // change this to your liking, doesn't really matter

但是这假设
file.php
在数据中永远不会返回null

否您不能将回调值设置为js全局变量。您必须在回调堆栈中使用回调值。

如果不工作,是否意味着您在警报中得到未定义或对象

在您的示例中,数据将是返回的json对象。因此,您需要了解该对象的结构才能使用它

例如,如果结构是:

数据={name=“Bob”,location=“London”}

然后data.name将为您提供值Bob


另外,mydata变量是jquery post函数的本地变量,您需要在函数外部定义它以在函数外部使用它。

好的,我不建议在任何情况下使用全局变量,尽管我不确定您希望在那里做什么,但您可能希望将数据流程包装在函数中

该代码工作正常,只是异步的,变量数据稍后会被填充。尝试以下操作以在控制台上查看您的数据:

var process(data) {
    // output your data
    console.log(data);
}

$.ajax({
    type: "POST",
    url: "file.php",
    data: ajaxData,
    success: process
});

只需在您需要的范围内(即在调用之外)声明
var mydata
var mydata=null;$。ajax({type:“POST”,url:“file.php”,数据:ajaxData,success:function(data){mydata=data;}});警报(mydata)谢谢你的感谢…这是糟糕的工作环境。如果ajax调用未成功返回,那么如果ajax调用未返回,那么mydata将始终为null,mydata!==null将失败,并且它将立即每1.5秒从函数返回一次…这是一个解决问题的糟糕解决方案。使用回调或承诺,不要使用轮询循环。@meagar我的理由是OP:
施加的限制,请注意我不能将我的代码合并到ajax调用的成功部分。我不会详细说明原因,因为这会增加混乱。
我完全理解这是一个糟糕的解决方法,我通常不鼓励:s。