2016-10-07 9 views
0

こんにちは皆私はajaxリクエストと結果を実行する関数を持っていますが、別の関数に戻りますが、その関数を呼び出すと未定義の値が返されます。ユーザー定義関数と表示値をコールバックする方法

function getState(id) 
 
{ 
 
    
 
    var StateJsonString = jQuery.parseJSON(id); 
 
    var stateData; 
 
    
 
    $.ajax({ 
 
     
 
     type: "POST", 
 
     
 
     url: "phpFile/getStatenameVehiclePro.php", 
 
     
 
     dataType: "json", 
 
     
 
     data: { id:StateJsonString.state}, 
 
     
 
     success: function(stateFrom){ 
 
      
 
      stateData = stateFrom.data[0][1]; 
 
      
 
     }, 
 
     Fail: function(){ 
 
      
 
      alert("Cannot Loading State Name"); 
 
      
 
     }, 
 
     error: function(){ 
 
      
 
      alert("Cannot Loading State Name"); 
 
     } 
 
     
 
    }); 
 
    
 
    return stateData; 
 
}

答えて

0

あなたがAjaxを使用すると、AはAsynchronousを意味します。あなたのコードで起こっていることは、コンパイラがあなたのajax関数に達するとすぐに、あなたのPHPページを要求します。同じ関数からreturn stateData;も返します。

var stateData;には値が割り当てられていません。そのため、あなたのajax呼び出しが開始され、ブラウザがあなたのajax呼び出しが最初に完了するのを待たずに、asynchronous機能と並行して実行しているときにundefinedを返しているのです。

async: falseを使用する必要がありますが、これはお勧めできません。しかし、あなたの場合は、これは働く提案です。

.ajax({    
     type: "POST",    
     url: "phpFile/getStatenameVehiclePro.php",   
     dataType: "json", 
     async: false 
}); 
+0

ありがとう –

0

falseにasyncオプションを追加して、AJAX呼び出しの外に戻ります。

  • 設定async to falseは、呼び出し中のステートメントが、関数内の次のステートメントを呼び出す前に完了しなければならないことを意味します。
  • async: trueを設定すると、その文は実行を開始し、次の文は非同期文がまだ完了しているかどうかにかかわらず呼び出されます。

function getState() { 
    var result=""; 
    $.ajax({ 
     url:"URL", 
     async: false, 
     success:function(data) { 
     result = data; 
     } 
    }); 
    return result; 
} 

また、

ハンドルAJAXリクエスト

//Ajax function call 
function getState() { 
    return $.ajax({ 
     url: "URL" 
    }); 
} 

//Get ajax request 
var promise = getState(); 

//Call on ajax success 
promise.success(function (data) { 
    //Do what you want 
}); 
関連する問題