为什么我的对象值在我的AJAX回调函数之外不可用?

时间:2013-07-23 16:53:08

标签: javascript jquery ajax object parameter-passing

我从facebook上的游戏中提取数据并将这些值存储在一个对象中,然后传递给PHP页面。一切都有效,除了存储在对象中的值以某种方式不被分配给全局对象变量这一事实。

如果我打印出函数中每个键的值,一切都很好。但是,如果我在函数外部打印它们,它们将返回null,除了在函数外部分配的键值。

var myObj={};
var key, val, i, nxtCell;
var srcStrings=["Attack","Defense","Health","Energy","Stamina"];

$.ajax(
{
type:'GET',url:'<game link'+uID,
dataType:'html',
success:function(data)
{
    var table=$(data);
    var myTD=table.find("td");

    $(myTD).each(function()
    {


        for(i=0;srcStrings.length>i;i++)
        {
            if($(this).text().indexOf(srcStrings[i])>=0 && $(this).text().indexOf("by")<0)
            {

                key=$.trim($(this).text());
                key=key.replace(':','');
                val=$.trim($(this).closest("td").next().text());                
                myObj[key]=val;




            }
        };
    });

            // This print works fine.
    $.each(myObj, function(key, value)
    {
        console.log(key + ":" + value);
    });

}
});

// Printing myObj key -> value pairs does not work here.

正如我所说,最后一个函数打印出对象值。但它们不会在AJAX回调之外打印出来。我尝试将数据传递给AJAX调用之外的函数,以查看它是否有任何影响,但事实并非如此。

1 个答案:

答案 0 :(得分:2)

这是因为当您尝试在AJAX回调函数之外打印值时,myObj仍然只是一个空对象(除了您为其明确设置的任何键/值)。

E.G。

var myObj = {};
$.ajax({
  // Settings and callback function that manipulates myObj
})

// Code to print myObj Key -> Value pairs

所有这些代码都是串行运行的,并且由于您在打印myObj时没有返回AJAX调用,因此它没有您期望的值。