2010-12-07 71 views
7

我如何獲得從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

Ajax以異步方式工作,所以如果找到的語句將在ajax調用完成之前命中。

你可以做的是從你的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

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負責的函數時傳遞您的回調函數:

     
    jobexist(jobname, afterAjax) 
    

  4. 執行此回調時,時間是正確的:

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

相關問題