【问题标题】:Why are my object values not available outside of my AJAX callback function?为什么我的对象值在我的 AJAX 回调函数之外不可用?
【发布时间】:2013-07-22 21:14:36
【问题描述】:

我正在从 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 调用之外的函数以查看是否有任何效果,但它没有。

【问题讨论】:

    标签: javascript jquery ajax object parameter-passing


    【解决方案1】:

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

    例如

    var myObj = {};
    $.ajax({
      // Settings and callback function that manipulates myObj
    })
    
    // Code to print myObj Key -> Value pairs
    

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

    【讨论】:

    • 感谢您的回复。我有一个帖子出现在上面列出的代码之后。由于这个原因,这些值没有发布。你能告诉我解决办法吗?
    • 太棒了!很高兴我能帮上忙。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多