我想知道为什么这段代码不起作用。
以下是我的工作:
使用电子邮件和密钥,我获得了一个有效的脚本路径;
有了脚本,我做了ajax请求并访问了一个函数 - getScriptUrlPersonalizationValue ;
此函数为我提供一个值,在本例中为国家/地区的值:美国;
我想知道为什么jQuery.when和.done函数不会返回国家/地区值。
我可以全局保存它,但我想学习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...}
});
有什么想法吗?
谢谢!
答案 0 :(得分:1)
.then()处理程序是独占的,不共享数据,正如其他人所提到的,这解释了为什么getData的.then()中的返回没有意义。最好只返回附加没有.then()的jQuery.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'
});
}
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...}
});
这是使用承诺的经典问题 - 如果你不小心,你可以得到真正的毛茸茸的分支。你可以越简单地保持链条越好。
答案 1 :(得分:0)
尝试向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
});
P.S。我不确定该解决方案是否有效,但你可以试试。