添加回调函数后,为什么我的变量在其中未修改?

时间:2015-04-28 23:33:50

标签: jquery ajax asynchronous

我知道它是异步的,但我已经按照添加回调函数Why is my variable unaltered after I modify it inside of a function? - Asynchronous code reference 的步骤进行了操作,但我只能访问回调函数中的更改。这是我的代码片段。请帮忙

function callback(point) {

       for (i = 0; i < point.length; i++) {
           myDate[i] = point[i].date_time;
           myValue[i] = point[i].my_value;
       }

       for (j = 0; j < myDate.length; j++) {
           var temp = new Array(myDate[j], myValue[j]);
           mySeries[j] = temp;
       }
       alert("MYSERIES in scope:  " + mySeries); //defined

   }
   alert("MYSERIES out scope:  " + mySeries); // undefined
   getAllMessagesforChart(callback);

   function getAllMessagesforChart(callback) {
                var data = @Html.Raw(JsonConvert.SerializeObject(this.Model))


        $.ajax({
            url: '/messages/GetMessagesforChat',
            data: {
                id: data.id,
            },
            contentType: 'application/html ; charset:utf-8',
            type: 'GET',
            dataType: 'JSON'

        }).success(function (data) {
            callback(data);
        }).error(function (e) {
            alert("error " + e)
        })     

   }

2 个答案:

答案 0 :(得分:1)

我希望这有助于为您解决问题 -

这不是范围问题。这是语句执行顺序的问题。如果您从amazon.com订购东西,您是否会立即前往您的前台并期望找到包裹?不,你必须等待无人机到达那里。

[{"ConcentratorID":"43","Name":"345","Address":"345"}] 变量是一个全局变量。它不超出范围&#34;在mySeries函数之外。并不是说您无法访问callback()功能之外的更改;它是指您无法在更改之前访问这些更改。警告&#34; MYSERIES范围&#34;在定义callback()函数后出现在代码中,但它在callback()函数执行之前执行。

即使您要更改以下两个语句的顺序,仍会在回调函数之前执行警报,因为在ajax调用以异步方式返回之前不会执行回调函数。

callback()

答案 1 :(得分:0)

在回调函数之外定义mySeries

var mySeries = [];
function callback(point) { ... }

首次将数据放入其中时,JavaScript创建了mySeries。因此,在调用回调后,它会全局定义。