如何从jquery ajax调用访问数据返回。在$ .ajax()之外。
//Reloads the inital page
function jobexist( jobname )
{
var dataString = 'jobname=' + jobname;
var found = false;
$.ajax(
{
type: 'POST',
url: "/genode/jobs/jobexist.m",
data: dataString,
dataType: 'json',
success: function(data)
{
alert("Passed");
if( data.result == 0 )
{
found = true;
}else{
found = false;
}
},
error: function( data )
{
alert("Login Failed");
return -1; //alert(data);
}
});
if( found == true )
{
alert("found!")'
return true;
}else{
alert("not found!");
return false;
}
}
if( !jobexist(jobname) )
{
$("#jobname_error").text("This jobname already exist.");
$("#jobname_error").show();
return false;
}
答案 0 :(得分:2)
Ajax以异步方式工作,因此在ajax调用完成之前将触发if found语句。
你可以做的是从你的ajax成功函数中调用一个函数并传递你想要的任何数据
function found(data){
if( data.result == 0 )
{
alert("found!")
return true;
}else{
alert("not found!");
return false;
}
}
$.ajax(
{
type: 'POST',
url: "/genode/jobs/jobexist.m",
data: dataString,
dataType: 'json',
success: function(data)
{
alert("Passed");
found(data);
},
error: function( data )
{
alert("Login Failed");
return -1; //alert(data);
}
});
答案 1 :(得分:1)
JavaScript是异步的,这意味着你应该改变一下你的思维方式,并开始进入回调和闭包的奇怪世界。 您可以简单地在ajax调用范围之外公开一些变量,并为其分配数据,但这并不是您想要做的事情。
您想要做的是:
定义回调函数:
function afterAjax() {
$("#jobname_error").text("This jobname already exist.");
$("#jobname_error").show();
return false;
};
重新定义负责ajax的函数以接受callbackFn作为第二个参数:
function jobexist( jobname, callbackFn ) {
传递回调函数:
jobexist(jobname, afterAjax)
在时机成熟时执行此回调:
if( data.result == 0 ) {
callbackFn();
}