我正在做一个噩梦试图这样做。 到目前为止,我必须尝试过15种不同的方法,这些方法来自我读过的不同帖子,但都失败了。
我只是想从ajax帖子中获取返回值。 这是我的代码
var test = compareNew(this.name, "remove");
alert(test);
function compareNew(obj, action) {
$.ajax({
url: "AJAX_compare_server.php",
type: 'post',
data: {
compare_id: obj,
action: action
},
success: function (result) {
var myObject = eval("(" + result + ")");
alert(myObject.html);
return(result);
}
});
}
警报(myObject.html);正确地显示我返回的html但警报(测试);告诉我'未定义'。 我已经花了好几个小时,但无法弄明白。 你能看到我错过的东西吗?
答案 0 :(得分:2)
实际上return
无法在asynchronous
来电中使用,但是如果你设置async:false
那么它会起作用,在这个(同步通话)情况下你可以试试这个
function compareNew(obj, action) {
$.ajax({
url: "AJAX_compare_server.php",
type: 'post',
data: {
compare_id: obj,
action: action
},
success: function(result) {
returnresult(result); // will call the function and will alert
}
});
}
function returnresult(ret){
// Do whatever you want to do with the result
if(ret) alert(ret);
}
compareNew(this.name, "remove");
你也可以像
一样使用它function compareNew(obj, action, callBack) {
$.ajax({
//...
success: function(result) {
callBack(result);
}
});
}
并称之为
compareNew(this.name, "remove", function(data){
alert(data);
});
答案 1 :(得分:1)
仅函数将返回值。 你应该使用ajax的返回方面.....
答案 2 :(得分:0)
ajax调用是异步的。一旦启动,javascript将继续执行并退出您的功能。成功处理程序中的return语句是对该匿名函数的返回,而不是对compareNew函数的return语句。 undefined
是我期望从您的脚本中获得的结果。
你应该做的是让success函数调用你定义的另一个函数,该函数应该对你的ajax调用返回的值执行工作。
如果您希望您的方法同步,可以设置一个选项(可能是您已经尝试过的选项之一)。在您的成功处理程序中,将一个作用于您的函数的变量设置为您想要返回的值,然后在ajax方法调用之后返回该值。我建议不要这样做,因为在调用等待返回时,使ajax调用同步会阻止执行任何其他javascript,这通常会导致用户体验不佳。
答案 3 :(得分:0)
这里有两点需要注意。
alert(test)
运行后完全有可能返回。 return (result)
未从compareNew
返回。它从您创建的success
函数返回答案 4 :(得分:0)
您无法从Ajax获得返回值。
是异步
答案 5 :(得分:0)
您使用return
作为方法
Corect是:
return result;
答案 6 :(得分:0)
Ajax是异步的,因此在完成ajax调用的结果之前执行alert(test);
。这就是你未定义的原因。
答案 7 :(得分:0)
将async设置为false,然后在success语句中设置返回值。在方法结束时(在ajax请求之外),返回retVal。
function compareNew(obj, action) {
var retVal;
$.ajax({
url: "AJAX_compare_server.php",
type: 'post',
data: {
compare_id: obj,
action: action
},
async: false,
success: function (result) {
var myObject = eval("(" + result + ")");
retVal = myOBject.html;
alert(myObject.html);
}
});
return retVal;
}
答案 8 :(得分:0)
如果你有firefox进行测试,你可以通过将警报转换为console.log()来查看异步调用的工作原理。并打开控制台。这将显示您正在转储的文本,并为您的ajax帖子提供可视化表示(以及数据的进展)。你可以看到测试var如何立即执行,顺便说一句,如果你想测试至少被定义,尝试让compareNew返回“something”;在底部,好像ajax甚至不存在。
var test = compareNew(this.name, "remove");
console.log(test);
function compareNew(obj, action) {
$.ajax({
url: "AJAX_compare_server.php",
type: 'post',
data: {
compare_id: obj,
action: action
},
success: function (result) {
var myObject = eval("(" + result + ")");
console.log(myObject.html);
//return(result); //this line isn't gonna do anything.
}
return "something";
});
}
`
答案 9 :(得分:0)
您无法从异步调用中获取返回值,例如AJAX请求。
原因是等待响应的代码已经在收到响应时执行。
解决方案是在success:
回调中运行必要的代码。
function compareNew(obj, action) {
$.ajax({
url: "AJAX_compare_server.php",
type: 'post',
data: {
compare_id: obj,
action: action
},
success: function (result) {
// Run the code here that needs
// to access the data returned
return result;
}
});
}
或者你可以在success:
回调
function compareNew(obj, action) {
$.ajax({
url: "AJAX_compare_server.php",
type: 'post',
data: {
compare_id: obj,
action: action
},
success: function (result) {
callFuction(result)
return result;
}
});
}
你也可以让它同步。你需要async:false
来实现它。
function compareNew(obj, action) {
var return_this;
$.ajax({
url: "AJAX_compare_server.php",
type: 'post',
async: false,
data: {
compare_id: obj,
action: action
},
success: function (result) {
return_this = result;
}
});
return return_this;
}