我以为我知道这是如何运作的 - 显然不是。
我无法返回从jQuery Ajax请求中获取的值。
这是我的代码:
function initForm() {
prefix = getPrefix(country_id);
alert(prefix); // <-- prefix is empty
}
// Get prefix
function getPrefix(country_id) {
var prefix = '';
jQuery.ajax({
url: siteURL +"/wp-content/themes/storelocator/include/jquery.php",
data: {instance: 'getPrefix', country_id : country_id},
success: (function(data) {
prefix = data.prefix;
alert(prefix) // <--- This alerts correct value
}),
dataType: 'json'
});
return prefix; // <-- This value is not set
}
如何正确使用回调在prefix
来电中设置jQuery.ajax
变量?
答案 0 :(得分:2)
这是由于Ajax请求的异步行为造成的。在Ajax请求收到响应之前,getPrefix()
函数将返回。您应该将回调函数传递给getPrefix(country_id)
函数,例如:
function getPrefix(country_id, callback) {
jQuery.ajax({
url: siteURL +"/wp-content/themes/storelocator/include/jquery.php",
data: {instance: 'getPrefix', country_id : country_id},
success: (function(data) {
callback.call(null, data.prefix);
}),
dataType: 'json'
});
}
然后打电话如下:
function initForm() {
getPrefix(country_id, function (prefix) {
// 'prefix' is now available
});
}
答案 1 :(得分:0)
未设置prefix的值,因为它是在ajax post获得响应并且触发回调之前返回的。
相反,请尝试
jQuery.ajax({
url: siteURL +"/wp-content/themes/storelocator/include/jquery.php",
data: {instance: 'getPrefix', country_id : country_id},
success: (function(data) {
prefix = data.prefix;
alert(prefix) // <--- This alerts correct value
return prefix;
}),
dataType: 'json'
});
}
答案 2 :(得分:0)
这可能对你有用。由于Ajax调用是异步的,因此您需要使用回调来设置前缀变量。
function initForm() {
getPrefix(country_id);
}
function getPrefix(country_id) {
var _this=this;
jQuery.ajax({
url: siteURL +"/wp-content/themes/storelocator/include/jquery.php",
data: {instance: 'getPrefix', country_id : country_id},
success: (function(data) {
_this.setPrefix(data.prefix); }),
dataType: 'json'
});
}
function setPrefix(prefixData){
prefix = prefixData;
alret(prefix);
}
答案 3 :(得分:0)
另一种方法是,虽然不推荐使用同步版本。
jQuery.ajax({
url: siteURL +"/wp-content/themes/storelocator/include/jquery.php",
data: {instance: 'getPrefix', country_id : country_id},
success: (function(data) {
prefix = data.prefix;
alert(prefix) // <--- This alerts correct value
}),
async:false,
dataType: 'json'
});
但我同意以前的答案。