我正在努力解決我正在處理的Web應用程序的概念問題。 該應用程序允許用戶拖拽&拖放DOM元素(如筆記,列表,圖片)。 將元素從菜單拖動到某種紙張上。 一旦你放下一個,應用程序會向服務器發出一個AJAX調用以保存該元素(位置,顏色等)。 服務器回答一個id,然後將其保存到DOM元素作爲其id屬性。 當您再次移動該元素時,會調用相同的AJAX調用,但使用其ID。拖放和AJAX保存後重復記錄
但問題是,如果我在放置區快速刪除一個新元素然後再次移動它,它會創建重複條目,因爲第一個AJAX調用還沒有完成,第二個調用沒有編號(因爲它必須來自服務器)。
下面的JavaScript代碼的簡化樣品保存元素:
function saveObject(object,action){
var params = {
x : object.position().left,
y : object.position().top,
w : object.width(),
h : object.height(),
};
if(object.attr("id")){
params.id = object.attr("id");
}
$.post("/save_object",params,function(data){
if(data.success){
object.attr("id",data.data);
}
});
}
服務器端,我只是檢查了一個ID,然後我要麼運行「創建」功能或「修改」功能用的ID。
這是非常具體的,我看了很多關於ajax重複的帖子,但設置一個標誌在這裏沒有幫助。我無法阻止AJAX請求被創建,因爲它不應該阻止任何UI元素,也不希望丟失任何保存事件。我有一些限制要堅持,因爲這個頁面是動態的,同一頁面上的用戶可以看到其他用戶的事件。
在這一點上我會很感激任何答案。
選項2的問題在於該應用程序現在與整個基礎架構一起工作,因此無法以這種方式進行重構。選擇1可能會達成協議,但我可能會在應用程序中以這種方式失去響應能力和活力。當然,你們在這裏沒有看到任何東西,但我不能詳細說明它更多的不幸:( – CinetiK
我認爲如果你只是重寫你的應用程序接受來自客戶端的ID而不是在服務器上創建一個ID,你應該好吧,我懷疑這會是一個巨大的變化,儘管我可能是錯的 – Ryan
問題是我們有移動應用程序的工作方式,我們不能改變,因爲它是數據庫變化以及服務器和應用程序 – CinetiK