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

时间:2010-12-07 16:07:36

标签: jquery 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;
}

2 个答案:

答案 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调用范围之外公开一些变量,并为其分配数据,但这并不是您想要做的事情。

您想要做的是:

  1. 定义回调函数:

    function afterAjax() {
      $("#jobname_error").text("This jobname already exist.");
      $("#jobname_error").show();
      return false;
    };
    

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

    function jobexist( jobname, callbackFn ) {
    

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

    jobexist(jobname, afterAjax)
    

  5. 在时机成熟时执行此回调:

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