OOスタイルでJavascriptを使用しようとしています.1つのメソッドでは、Webページで使用できるようにデータを取得するためにリモート呼び出しを行う必要があります。私は他の場所でロジックを再使用できるようにそうように、データ検索をカプセル化するJavaScriptクラスを作成しました:Webページ自体がこのようなを呼び出しjQuery Ajaxメソッドから値を返す
AddressRetriever = function() {
AddressRetriever.prototype.find = function(zip) {
var addressList = [];
$.ajax({
/* setup stuff */
success: function(response) {
var data = $.parseJSON(response.value);
for (var i = 0; i < data.length; i++) {
var city = data[i].City; // "City" column of DataTable
var state = data[i].State; // "State" column of DataTable
var address = new PostalAddress(postalCode, city, state); // This is a custom JavaScript class with simple getters, a DTO basically.
addressList.push(address);
}
}
});
return addressList;
}
}
は次のとおりです。
は$('#txtZip').blur(function() {
var retriever = new AddressRetriever();
var addresses = retriever.find($(this).val());
if (addresses.length > 0) {
$('#txtCity').val(addresses[0].getCity());
$('#txtState').val(addresses[0].getState());
}
});
問題があります場合によってはaddresses
が不可解に空である(すなわち、長さ= 0)ことがあります。 Firebugでは、XHRタブには予想されるデータが返ってくるという応答が表示されます。成功メソッドの内部にアラートを設定すると、長さは正しくなりますが、値を返そうとするとそのメソッドの外になることがあります)空と私のテキストボックスにデータが入力されません。時にはそれが空であると表示されますが、テキストボックスにはとにかく適切に入力されます。
私は別のクラスを取り除き、イベントハンドラにAjaxコール全体を詰め込むことでこれを行うことができますが、これを正しく実行する方法を探していますので、必要に応じて関数を再利用できます。何かご意見は?
可能な複製[jQuery Ajax呼び出しから正しい戻り値を取得できません](http://stackoverflow.com/questions/3537434/cant -get-correct-return-value-from-jquery-ajax-call) –
"error:"ハンドラをインクルードし、successブロック内でaddressListを返す必要があるようです。また、それは非同期であるためです。 AJAX呼び出しが完了する前に "return addressList"が発生している可能性があります。 –
[JavaScript非同期戻り値/ jQueryでの代入]の複製が可能です。(http://stackoverflow.com/questions/7779697/javascript-asynchronous-return-value-assignment-with-jquery) –