如何访问从jquery ajax调用返回的数据? $ .ajax(…)之外;

如何从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; } 

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); } }); 

JavaScript是异步的,这意味着你应该改变一下你的思维方式,并开始进入回调和闭包的奇怪世界。 您可以简单地在ajax调用范围之外公开一些变量,并为其分配数据,但这并不是您想要做的事情。

你想要做的是:

  1. 定义一个回调函数:

     function afterAjax(){
       $(“#jobname_error”)。text(“此作业名已存在。”);
       $( “#jobname_error”)显示()。
      返回虚假;
     };
    

  2. 重新定义负责ajax的函数以接受callbackFn作为第二个参数:

     function jobexist(jobname,callbackFn){
    

  3. 执行ajax-responsible函数时传递回调函数:

     jobexist(jobname,afterAjax)
    

  4. 当时间正确时执行此回调:

     if(data.result == 0){
        callbackFn();
     }