2010-12-07 15 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は非同期に動作し、ifXX呼び出しが終了する前にfindステートメントがヒットします。あなたは何ができるか

は、あなたの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. は、2番目のパラメータとしてcallbackFnを受け入れるようにAJAXを担当するあなたの関数を再定義:

     
    function jobexist(jobname, callbackFn) { 
    

  3. は、ajax責任関数を実行するときにコールバック関数を渡します。

     
    jobexist(jobname, afterAjax) 
    

  4. 時間が右のときにこのコールバックを実行します。

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

関連する問題