0

在下面的代码中,函数内的警报工作正常,但第二个有未定义的变量,但我已经在函数外删除了变量。为什么是这样?

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]);

如果您遇到以下类似问题如何从 AJAX 调用返回响应?有明确的解释和答案。

4

3 回答 3

1

函数参数内和函数外的引用data是不同的变量。在第一种情况下,它在全局范围内,在第二种情况下,在本地范围内..它们完全不同。

这个例子说明了这个问题......

    var data=2;//this
    function fun(data){ //and this are different
              alert(data);
     }
     var data2=3;
     fun(data2);
于 2013-06-07T13:26:36.820 回答
0

正如 pinkpanther 所指出的,回调data内部的局部变量与函数外部的变量不同。$.postdata

此外,由于$.post 是异步的,您需要向它传递一个回调或使用它返回的延迟对象来访问响应。

$.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);

顺便说一句,如果您要使用回调样式而不是 Promise ,我建议使用$.ajax而不是 $.post。原因是 $.ajax 提供了错误回调,而 $.post 没有。

于 2013-06-07T13:25:58.983 回答
0

你可以试试这个:

var data = [];
var myRequest = $.post(
    /* your stuff */
); 
myRequest.done(function() { alert(data[0][0][0]); })
于 2013-06-07T13:35:28.097 回答