2012-04-02 47 views
2

我有一个ajax调用。我把返回值(数据)放在一个名为mydata的变量中。我想在ajax调用之外使用该变量。请注意,我无法将我的代码并入ajax调用的成功部分。我不会详细说明原因,因为它会增加混淆。所以问题很简单。有没有办法在ajax调用之外使用ajax调用的返回值?预先感谢您的回复。干杯。马克jQuery - 如何使用ajax调用外的ajax调用的返回值

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

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

只是声明'在你需要它(即外呼)范围VAR mydata'。 – m90 2012-04-02 09:17:29

+0

'var mydata = null; $就({ 类型: “POST”, URL: “file.php”, 数据:ajaxData, 成功:功能(数据){ MYDATA =数据; } });警报(mydata);' – YumYumYum 2012-04-02 09:17:55

回答

3

简短的回答:不,你不能,作为一个在AJAX的全称是“异步”,因此该脚本不“等待” 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永远不会返回数据空

+0

谢谢你的确认... – Marc 2012-04-02 09:23:11

+2

这是糟糕的workarround。如果ajax调用不成功返回它将无限循环 – Yorgo 2012-04-02 09:27:47

+0

如果ajax调用不返回,那么mydata将始终为null,并且mydata!== null将失败,并且它会立即从该函数每1.5秒返回一次... – 2012-04-02 09:29:11

0

不,你不能设置回调值到js全局变量。您必须在回调堆栈中使用回调值。

1

通过不工作,你的意思是你得到未定义或对象的警报?

在你的例子中,数据将是一个返回的json对象。因此,您需要知道该对象的结构才能使用它。

例如,如果结构为:

数据= {名称= “鲍勃”,位置= “伦敦”}

然后data.name会给你的价值鲍勃。

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

2

嗯,我不建议在任何情况下都使用全局变量,尽管我不确定你想在那里做什么,但是你可能想把你的数据过程包装在一个函数中。

该代码工作正常,它只是异步,并且您的可变数据正在被填充。尝试这样的事情这在控制台上看到你的数据:

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

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