Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.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
Javascript jQuery.when,无法获取gata_Javascript_Jquery - Fatal编程技术网

Javascript jQuery.when,无法获取gata

Javascript jQuery.when,无法获取gata,javascript,jquery,Javascript,Jquery,我想知道为什么这个代码不起作用 以下是我的工作: 使用一封电子邮件和一把钥匙,我得到了一个脚本的路径,这是可行的 有了这个脚本,我执行一个ajax请求并访问一个函数-getScriptUrlPersonalizationValue 此函数为我获取一个值,在本例中为国家:美国 我想知道为什么jQuery.when和.done函数不会返回国家值。 function getData(key) { var email = 'myemail@test.com', url = g

我想知道为什么这个代码不起作用

以下是我的工作:

  • 使用一封电子邮件和一把钥匙,我得到了一个脚本的路径,这是可行的

  • 有了这个脚本,我执行一个ajax请求并访问一个函数-getScriptUrlPersonalizationValue

  • 此函数为我获取一个值,在本例中为国家:美国

  • 我想知道为什么jQuery.when和.done函数不会返回国家值。

  • function getData(key) {
    
        var email = 'myemail@test.com',
            url = getScriptUrl(key, email); // returns the valid url towards the script
    
        return jQuery.ajax({
                    url : url,
                    dataType : 'script'
                }).then(function() {
                    country = getScriptUrlPersVal('Country');
    
                    console.log(country); // returns: 'United States'
    
                    // And I pass it:
    
                    return country;
                });
    }
    
    jQuery.when( getData() ).then(function (data, textStatus, jqXHR) {
    
        console.log(data); // returns: undefined - should return United States
        console.log(textStatus); // returns: success
        console.log(jqXHR);  // returns: Object { readyState=4, status=200, statusText="success", more...}
    
    });
    
我可以在全局范围内保存它,但我想学习javaScript,我想了解一下失败的原因

我试着对代码进行注释,这比上面给出的解释要好得多。

function getData(key) {

    var email = 'myemail@test.com',
        url = getScriptUrl(key, email); // returns the valid url towards the script

    return jQuery.ajax({
                url : url,
                dataType : 'script'
            }).then(function() {
                country = getScriptUrlPersVal('Country');

                console.log(country); // returns: 'United States'

                // And I pass it:

                return country;
            });
}

jQuery.when( getData() ).then(function (data, textStatus, jqXHR) {

    console.log(data); // returns: undefined - should return United States
    console.log(textStatus); // returns: success
    console.log(jqXHR);  // returns: Object { readyState=4, status=200, statusText="success", more...}

});
有什么想法吗

谢谢大家!

then()处理程序是独占的,不共享数据,正如其他人所提到的,这解释了为什么getData的.then()中的返回没有意义。最好只返回jQuery.ajax,不附带.then(),并在一个级别上处理它。如果需要,您可以将几个“then”链接在一起

function getData(key) {
    var email = 'myemail@test.com',
        url = getScriptUrl(key, email); // returns the valid url towards the script

    return jQuery.ajax({
                url : url,
                dataType : 'script'
           });
}

jQuery.when(getData()).then(function (data, textStatus, jqXHR) {
    country = getScriptUrlPersVal('Country');
    console.log(country); // returns: 'United States'
    console.log(data); // returns: undefined - should return United States
    console.log(textStatus); // returns: success
    console.log(jqXHR);  // returns: Object { readyState=4, status=200, statusText="success", more...}
});

这是使用承诺的一个经典问题——如果不小心,可能会得到非常多毛的分支。链条越简单越好

尝试向AJAX响应数据添加属性,而不是返回值

function getData(key) {

    var email = 'myemail@test.com',
        url = getScriptUrl(key, email); // returns the valid url towards the script

    return jQuery.ajax({
                url : url,
                dataType : 'script'
            }).then(function(data, textStatus, jqXHR) {
                country = getScriptUrlPersVal('Country');

                console.log(country); // returns: 'United States'

                // Try to set your country to data object of ajax response.
                data.country = country;
            });
}

jQuery.when( getData() ).then(function (data, textStatus, jqXHR) {
     console.log(data); // should return object with property .country
});

另外,我不确定该解决方案是否有效,但您可以尝试。

从作为
传入的函数返回值。然后()将忽略
处理程序。您无法从回调函数返回值。AJAX不是这样工作的。您的
返回国什么都不做。
getScriptUrlPersVal('Country')
做什么?如果要获取
国家
值,需要在第二个
函数中再次调用
getScriptUrlPersVal
data
参数是从AJAX调用中检索到的值。getScriptUrlPersVal('Country')返回Country val,在本例中为'United'@DanyD:如果您想在第二个
中输入Country,则需要再次调用该参数。我理解,因此数据是从AJAX调用返回的。你能写一封回信让我批准吗?