所以我有这个javascript函数,它发送一个ajax请求来从php变量中获取一个值。
该功能如下:
function get_cart_limit() {
$.ajax({
url: '/w2w/ajax/',
data: {
_action: 'get_cart_limit'
},
type: 'post',
timeout: 10000,
success: function(output) {
var cartlimit = output;
alert(cartlimit); // this gives me the correct value.
return cartlimit;
},
error: function(output){
}
});
}
当我从另一个函数调用此函数时:
var cartlimit = get_cart_limit();
我的变量“cartlimit”未定义。
所以ajax调用正在工作,但为什么我不能将值返回给另一个函数? 为了我早,我的大脑不能正常工作! :)
干杯!
答案 0 :(得分:1)
如果更改 cartlimit 变量的范围并禁用异步请求, get_cart_limit()应返回正确的值
function get_cart_limit() {
var cartlimit;
$.ajax({
url: '/w2w/ajax/',
data: {
_action: 'get_cart_limit'
},
type: 'post',
timeout: 10000,
async: false,
success: function(output) {
cartlimit = output;
},
error: function(output){
}
});
return cartlimit;
}
答案 1 :(得分:1)
仅在AJAX请求成功终止后才设置变量cart_limit
。
为什么呢?
get_cart_limit()
在实际答案从服务器返回之前结束success: function(output) { /*...*/ }
的匿名函数。如果在执行成功函数之前调用另一个试图访问cart_limit
的函数,则会得到一个未定义的值。
即使你在success
函数中执行一个return语句,它也是与get_cart_limit()不同的函数,它会在不同的时间执行,所以你不会获得分配返回值所需的效果任何变量。
解决这个问题的方法是让匿名成功函数调用需要cart_limit
的函数。
function get_cart_limit() {
$.ajax({
url: '/w2w/ajax/',
data: {
_action: 'get_cart_limit'
},
type: 'post',
timeout: 10000,
success: function(output) {
var cartlimit = output;
alert(cartlimit); // this gives me the correct value.
function_that_needs_cart_limit();
},
error: function(output){
}
});
}
答案 2 :(得分:0)
使用全局范围声明此 cartlimit 。在函数开始之前对此进行Decalre
var cartlimit;
function get_cart_limit() {
$.ajax({
...................
这里只有在ajax函数成功后才会声明cartlimit。
但是在成功之前可能需要执行另一个脚本。所以它会得到未定义的
答案 3 :(得分:0)
您可以将输出数据传递给指定的函数,如此
var cartlimit = get_cart_limit(output);