2011-10-28 22 views
1

還在學習,所以要溫柔後重定向) - 發生了什麼事在我的網站是以下幾點:需要一個頁面發出一個請求.post的使用jQuery

  1. 發送AJAX POST請求更新SQL數據庫與新的事件 與會者
  2. 發送一些電子郵件通知
  3. 等待服務器返回「OK」的電子郵件發送
  4. 刷新頁面與新的與會者表現出來

發送電子郵件可能需要長達5秒或更長時間,我不希望用戶必須等待它完成。我試圖現在要做的就是改爲:

  1. 發送AJAX POST請求SQL
  2. 發送服務器請求電子郵件通知
  3. 刷新頁面之前服務器#2響應。

我試着發帖:

window.location.replace(""); 

$.post(
'/_x_/email/tag', 
    { 
    event_id: event_id, 
    tagged_id: tag_id, 
    type: 'tag_event_ongoing' 
    } 
); 

但服務器仍然會等待響應。 我也試過:

document.open(); 
$.get("",function(data) { 
    document.write(data); 
}) 
document.close(); 

發佈請求之前 - 這將重新加載頁面,但沒有JavaScript的工作的一些原因,除非我手動刷新。

編輯:我已經使用適當的$阿賈克斯也試過()調用:

var email = $.ajax({ 
url: '/_x_/email/tag', 
type: 'POST', 
data: { 
    event_id: event_id, 
    tagged_id: tag_id, 
    type: 'tag_event_ongoing' 
}, 
dataType: "json", 
success: function (res) { 
    window.location.replace(""); 
} 
}); 

附加說明: 我通過電子郵件發送代碼編寫的回調SQL插入 - 因此電子郵件是唯一當SQL插入成功時發送。我認爲這不重要,但以防萬一。

有人知道我該如何解決這個問題嗎?

回答

0

我會考慮使用全面的$.ajaxcall而不是post。這會給你更多的控制,因爲有幾個Ajax事件可以接入。

您也可以從服務器返回新事件與會者列表,然後您可以跳過整個頁面的重新加載。如果您重新加載整個頁面,最終可能會導致無法確定是否或何時完成AJAX呼叫。

您是否正在爲項目1和項目2進行兩次單獨的AJAX調用,或者您是否在一次調用服務器時執行了兩個操作?如果你在一個功能中完成所有功能,那麼你可以將服務器端調用分成兩個函數,並在客戶端上進行兩個離散的ajax調用。這樣,當號碼1返回時,您可以更新屏幕而不用等待號碼2。

這是我可以用你提供的少量代碼做的最好的。

+0

我嘗試了$ .ajax並使用「成功」事件,但它似乎仍然等待服務器在重定向之前返回響應。我會將代碼附加到我的帖子中。 –

+0

另外,我實際上目前正在發送兩個單獨的AJAX調用,並試圖執行您所描述的內容。我的問題是,我似乎無法做到這一點 - 我似乎無法等待數字2更新屏幕。 –

+0

在這種情況下,我會在更新數據庫並重新繪製數據庫後返回新事件與會者列表當AJAX呼叫號碼1回來時的屏幕。那麼你不必刷新屏幕,完全可以避免這個問題。 – arb

1

您應該將您的服務器平臺配置爲在後臺發送電子郵件。所有服務器應該做的就是確認收到來自ajax郵件的信息,在後臺產生郵件程序,並讓用戶盡情享受。我不能想到的唯一原因是,如果您要重定向的頁面取決於正在發送的電子郵件。這將需要某種異常通知或在出現錯誤時「重試」該過程的方式。

這是解決這個問題的正確方法,但你可能可以用Javascript來破解它,我猜。

+0

感謝亞當 - 你有關於如何實現電子郵件的後臺進程的建議?我在LAMP堆棧上 - 是否會使用讀取類似「電子郵件」表的內容的chron腳本?如果你能分享一個插件或者說明我如何做到這一點的網站,那將會很棒。謝謝! –

+0

通過LAMP堆棧,你的意思是你的應用程序是用PHP編寫的?如果是這樣的話,在收到ajax文章後,快速將您的數據存儲在電子郵件表中。然後你需要一個cron作業,如果你喜歡(可能是最簡單的),你可能會每小時執行一次cron作業。該腳本將從數據庫中讀取「正在等待」的電子郵件並逐個發送。在成功發送時,取消將其標記爲掛起,然後繼續。您可能還想跟蹤發送嘗試。可能在3次發送嘗試後,將該記錄標記爲失敗。這應該足以讓你開始。 –

0

使用jQuery.post()... [,success(data,textStatus,jqXHR)中指定的回調。讓您知道數據何時發佈,並繼續以您的快樂方式服務用戶下一步要做的事情。

+0

我試過使用成功回調,但它似乎仍然等待服務器響應 - 我想在服務器響應之前採取行動。基本上在服務器仍在「處理」時「繼續前進」。這是「成功」應該做的嗎?也許我的語法不正確呢? (我附上了上面的代碼,謝謝!) –

相關問題