Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery无法在.ajax()调用后保留数据_Jquery_Ajax_Function_Variables - Fatal编程技术网

jQuery无法在.ajax()调用后保留数据

jQuery无法在.ajax()调用后保留数据,jquery,ajax,function,variables,Jquery,Ajax,Function,Variables,我正在尝试执行一个简单的调用,从$.ajax()返回数据,并希望将其保存到一个全局变量中,我可以在调用ajax调用的函数中使用该变量 为什么不设置变量?为什么我设置的值丢失了 jQuery.support.cors = true; $.myNamespace = { timerID: "in namespace" }; $(document).ready(function () { $("#btnSkip").click(function () { alert

我正在尝试执行一个简单的调用,从$.ajax()返回数据,并希望将其保存到一个全局变量中,我可以在调用ajax调用的函数中使用该变量

为什么不设置变量?为什么我设置的值丢失了

jQuery.support.cors = true;

$.myNamespace = {
    timerID: "in namespace"
};

$(document).ready(function () {
    $("#btnSkip").click(function () {
        alert($.myNamespace.timerID);
        startCall();
    });

    function startCall() {
        $.myNamespace.timerID = "in startCall()";
        alert($.myNamespace.timerID);
        finishCall();
        alert($.myNamespace.timerID);
    }

    function finishCall() {
        $.myNamespace.timerID = "in finishCall()";
        alert($.myNamespace.timerID);

        $.ajax({
            type: "GET",
            url: getUrl,
            processData: false,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                $.myNamespace.timerID = "in ajax succeeded call";
                alert($.myNamespace.timerID);
            },
            error: function (xhr, status, error) {
                GetSongInfoFailed(xhr, status, error);
            }
        });
    }

    function GetSongInfoFailed(xhr, status, error) {
        alert('Service call failed: ' + xhr + ' ' + status + ' ' + error);
    }


});
上述代码中的
alert()
s的输出:

  • 命名空间中的
  • startCall()中的
  • finishCall()中的
  • ajax调用中的
    成功
  • finishCall()中的
  • 为什么最后一个变量设置为“in finishCall()”而不是“in ajax successed call”

    注意,我不是jQuery或javascript专家


    非常感谢你

    您的成功回调函数

     function GetSongInfoSucceeded(C) {
            if (result != null) {
    
                $.myNamespace.timerID = "in ajax succeeded call";
                alert($.myNamespace.timerID);
    
            } else { }
    
        }
    

    您有一个无效的
    请求
    变量,当您的函数将
    C
    作为输入数据时

    因此,当您收到数据时,funct。被称为:

    GetSongInfoSucceeded(data);
    
    如果我们查看您的函数定义:

    function GetSongInfoSucceeded(C) {
    
    然后我们看到,一个“数据”的输入现在将在名为
    C
    的var中。这就是为什么调用
    result
    不会给出任何答案的原因:

            if (result != null) {
    
                $.myNamespace.timerID = "in ajax succeeded call";
                alert($.myNamespace.timerID);
    
            } else { }
    
    正确的方法是这样的:

    function GetSongInfoSucceeded(result) {
        if (result != null) {
            $.myNamespace.timerID = "in ajax succeeded call";
            alert($.myNamespace.timerID);
        } else { }
    }
    

    这不是保存数据的问题,而是执行顺序的问题。让我们再次检查代码,这次将finishCall()调用替换为函数的实际代码:

    alert($.myNamespace.timerID);
    
    $.myNamespace.timerID = "in finishCall()";
    alert($.myNamespace.timerID);
    
    $.ajax({..., ..., function() {     
      $.myNamespace.timerID = "in ajax succeeded call()";
      alert($.myNamespace.timerID);
    });
    
    alert($.myNamespace.timerID);
    
    请看,JS不会等到$.ajax调用成功后才调用最后一个
    警报。当它这样做时,finishCall()中的值仍然是


    让我困惑的是,正如你所说,为什么这个
    警报显示在最后一个,而不是最后一个之前;使用
    console.log
    时,“ajax成功调用”实际上是最后一次显示。

    停止使用警报进行调试,改用console.log(消息)。您可以在firefox中使用firebug,也可以在safari或chrome中使用开发工具。如果你这样做,你会更快乐的。谢谢你,我会努力的。这应该是一个5分钟的项目。结果就是因为这个被关了好几个小时。是的,这不是问题所在。实际上,我也直接在成功中分配变量,即使这样也不起作用。我也把它改成了“结果”。仍然没有。删除并修改了代码。还是同一个问题。也许现在更清楚了。。。谢谢你的帮助。是的,你说得对。这就是我所想的问题所在。事件序列和异步调用。但是,我需要将这些函数彼此分开,因为它们会从不同的位置重复调用。我也很困惑。