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调用返回的。你能写一封回信让我批准吗?