2012-02-21 8 views
0

jquery ajaxを呼び出す関数で値を返す方法。私は以下の方法に近づきましたが、それが正しいかどうかはわかりません。Jquery ajaxの呼び出し値を返す方法は?

function a(){ 
var a=ajaxFunction(); 
} 

$.ajax({ 
    url: "Handler.ashx", 
    cache: false, 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function (data) { 
     _testId = data.Id; 
    } 

return _testId 

}); 

しかしvarには値が定義されていません。上記の方法では_testIdの値は返されません。それが間違っているなら、正しいアプローチを教えてください。

答えて

1

「Ajax」のAは「非同期」の略称であるため、コールバック関数を使用する必要があります。

$.ajax({ 
    'url': 'Handler.ashx', 
    'cache': false, 
    'contentType': 'application/json; charset=utf-8', 
    'dataType': 'json', 
    'success': callback 
); 

function callback(data) { 
    var testID = data.id; 
    console.log(testID); 
} 

あなたは同様にそれをインライン化する無名関数を使用することができます:Ajaxの結果に依存

$.ajax({ 
    'url': 'Handler.ashx', 
    'cache': false, 
    'contentType': 'application/json; charset=utf-8', 
    'dataType': 'json', 
    'success': function(data) { 
     var testID = data.id; 
     console.log(testID); 
    } 
); 

すべてのコードは、コールバックで処理する必要があります。

0

AJAX呼び出しが非同期に実行されるため、呼び出しが完了する前にreturnステートメントがヒットします。したがって、返される値は常に不定です。

$.ajax({ 
    url: "Handler.ashx", 
    cache: false, 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function (data) { 
     _testId = data.Id; 

     // do whatever you need with _testId in here. 
     // You can pass it to another function if you require to modularise your logic, eg. 
     processResult(data) 
    } 
}); 

function processResult(json) { 
    // do stuff with your json here 
} 
0

私はおそらくこれを行うだろう:

var _testID = false; 

function a(){ 
    ajaxFunction(); 
    if(_testID) 
    { 
     //Do what you need here 
    } 
} 

$.ajax({ 
    url: "Handler.ashx", 
    cache: false, 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function (data) { 
     _testId = data.Id; 
    } 
}); 
+1

これは動作しません

は、あなただけの成功ハンドラ内AJAX呼び出しの結果に対処するためのロジックを変更する必要がありますMatthiasと私が説明した理由から。 –

関連する問題