私が実行した面白い問題です。私は、jQueryのUIダイアログ内でデータを参照するためにjQuery AJAX呼び出しを使用するStruts 2 Webアプリケーションを持っています。同じページには、異なるデータを検索する2つの異なるダイアログがあります。各ダイアログにはページングがあるため、次のリンクが表示されます。同じコールバックを呼び出すダイアログまたは複数のダイアログしかない場合は、すべて正常に動作します。複数のダイアログが表示されるとすぐに、それぞれがアクションクラスへのコールバックを呼び出すと、それが破棄されます(つまり、getCustSearchHtml()メソッドは両方のAJAX呼び出しで呼び出されます)。タスクルックアップ中に[次へ]リンクをクリックすると、適切なアクションメソッドが呼び出されますが、成功コールバックはtaskData.taskSearchHtmlの代わりにreturnData.custSearchHtmlを呼び出します。ここに基本コードがあります:jQuery AJAXの両方のアクションを実行するPOSTは、自分自身の代わりに同じコールバックメソッドを実行します
$('#customer-lookup').delegate('#CLnextLink', 'click', function(e) {
e.preventDefault();
var workOrderId = $("#workOrderId").val();
var nextPage = $("#nextPage").val();
$.ajax({
type: "POST",
url: "CustomerLookup",
data: { id: workOrderId, page: nextPage },
dataType: "json",
success: function(returnData) {
$("#customer-lookup").html(returnData.custSearchHtml);
}
});
});
$('#task-lookup').delegate('#TLnextLink', 'click', function(e) {
var workOrderId = $("#workOrderId").val();
var nextPage = $("#nextPage").val();
$.ajax({
type: "POST",
url: "TaskLookup",
data: { id: workOrderId, page: nextPage },
dataType: "json",
success: function(taskData) {
$("#task-lookup").html(taskData.taskSearchHtml);
}
});
return false;
});
......
<div id="customer-lookup" class="ui-dialog" title="Customer Lookup">
.....
<a id="CLnextLink" href="#">Next Page</a>
.....
</div>
<div id="task-lookup" class="ui-dialog" title="Task Lookup">
.....
<a id="TLnextLink" href="#">Next Page</a>
.....
</div>
私が間違っていると思われる人は誰ですか?ありがとう!
ある「getCustSearchHtmlは()」が2回呼び出されますが、提供されているコードのそれへの参照はありません。これはクライアント側の問題です。質問からstruts2への参照をすべて削除し、jquery忍者の私は自信を持って答えを見つけるでしょう。 – Quaternion
customer-lookupのajax呼び出しを見ると、成功コールバックはreturnData.custSearchHtmlからhtmlを設定します。それが参考です。それはタスクルックアップのためにも呼び出されます。 –