2014-01-13 52 views
0

這似乎是一個常見問題,但我找不到相關主題 - 如果我在此處遺漏了某些內容,請指示我。在頁面重定向之前將數據發佈到服務器異步

我們正在使用某種點擊跟蹤器到我們的網站。 當用戶點擊鏈接時,此跟蹤器正在接聽電話,我們希望將某些數據填充到不同的服務器,並讓用戶繼續點擊網址。

因爲我不想在這裏等待服務器響應 - 我不是在等待這個ajax調用的響應。 但發生的是我失去了這個電話,它永遠不會到達服務器。 執行此操作的正確方法是什麼?

我正在使用top.window.location.href = url;因爲我有時會在Iframe中打開。

function onClick(url, clickedFrom) { 
     var testClick = ServerHost + "click"; 
     var dataObject = buildCommonData(); 

     $.ajax({ 
      dataType: 'post', 
      contentType: "text/json; charset=utf-8", 
      data: dataObject, 
      url: testClick, 
      async: true, 
      success: function (response) { 
       top.window.location.href = url; 

      }, 

     }); 
     top.window.location.href = url; 

     return false; 
    } 
+2

您需要在卸載頁面之前等待響應。 – SLaks

+0

由於第二個'top.window.location.href'調用@Kiran,'$ .ajax()'調用沒有足夠的時間調用服務器。但是@briler是,如果你必須*確保跟蹤器被觸發,你需要等待。 – digitalextremist

+0

@digitalextremist ajax調用已經被放置,但是回調將不會被執行,因爲他正在重定向。 – Kiran

回答

1

刪除第二個top.window.location.href = url; ...這是你的重挫電話$.ajax() ......而從未達到return false


考慮使用setTimeoutsuccess:$.ajax()來電!

您可以雙擊你這裏的做法,並保持第二top.window.location.href電話,但把它放在一個setTimeout塊,萬一有一個$.ajax()延遲。

這樣,$.ajax()呼叫應該先發生,但如果沒有,至少用戶沒有如果/當存在掛斷電話$.ajax()服務器故障推遲。

+0

我想過暫停 - 但我不想讓用戶在這裏等待。 – briler

+0

爲我更新了我的答案。 – digitalextremist

+0

謝謝,我結束了與ajax成功和失敗top.window.location.href = url,還添加了超時屬性。因爲我不想用戶等待很長時間。因爲它沒有發送ajax調用,所以刪除了ajax範圍top.window.location.href = url。 Tahnks爲你提供幫助。 – briler

相關問題