在下面的代码中,函数内部的警报工作正常,但第二个函数的变量未定义,但我已经在函数外部对变量进行了描述。为什么是这样?
var data = [];
$.post(
'matchEngine.php',
function(data) {
for (var i = 0, len= data.length;i <len; i++) {
for ( h = 0, len2= data[i].length;h <len2; h++) {
data[i][h][0]=(data[i][h][0])*30;
data[i][h][1]=(data[i][h][1])*30;
data[i][h][3]=data[i][h][3].replace(/\"/,"");
}
}
alert(data[0][0][0]);
}
);
alert(data[0][0][0]);
如果您遇到类似问题,以下How to return the response from an AJAX call?会有明确的解释和答案。
答案 0 :(得分:1)
函数参数和函数外部的引用data
是不同的变量。在第一种情况下,它在全球范围内,在第二种情况下在本地范围内。它们完全不同。
该示例说明了问题......
var data=2;//this
function fun(data){ //and this are different
alert(data);
}
var data2=3;
fun(data2);
答案 1 :(得分:0)
正如pinkpanther所指出的,data
回调中的本地$.post
变量与函数外部的data
变量不是同一个变量。
此外,自$.post is asynchronous起,您需要传递一个回调或使用它返回的deferred对象来访问响应。
$.post('matchEngine.php').then(function(data){alert(data)})
例如,如果您希望能够将响应传递给其他函数,则可以执行以下操作:
function doPost(url){
return $.post(url);
}
function processResponse(response) {
alert(response);
}
responsePromise = doPost("matchEngine.php");
responsePromise.then(processResponse);
另外,如果您打算使用回调样式而不是promises,我建议使用$.ajax而不是$ .post。原因是$ .ajax提供了错误回调而$ .post没有。
答案 2 :(得分:0)
你可以试试这个:
var data = [];
var myRequest = $.post(
/* your stuff */
);
myRequest.done(function() { alert(data[0][0][0]); })