我有以下的javascript代碼:
$.post("<receiver>", postdata);
,並得到POSTDATA並非總是如此。如果我寫下面的代碼一切正常:
$.post("<receiver>", postdata);
alert('bla-bla-bla, read me for a second');
爲什麼?隨着javascript的運行,頁面在保存按鈕上發生變化。但是我需要在重定向之前發送發佈數據。
我有以下的javascript代碼:
$.post("<receiver>", postdata);
,並得到POSTDATA並非總是如此。如果我寫下面的代碼一切正常:
$.post("<receiver>", postdata);
alert('bla-bla-bla, read me for a second');
爲什麼?隨着javascript的運行,頁面在保存按鈕上發生變化。但是我需要在重定向之前發送發佈數據。
您應該在AJAX調用的成功回調內部重定向:
$.post("<receiver>", postdata, function() {
window.location.href = '...';
});
爲什麼如果你$.post
電話後,立即把警報您的代碼工作的原因,是因爲在此提醒彈出,瀏覽器掛起執行和你的AJAX調用有足夠的時間來完成。
不要忘記,在AJAX的第一個A代表異步的含義,你可以只消耗的結果從服務器返回內成功回調。
此外,如果這個AJAX調用內部形式的一些.submit()
事件處理程序或內部提交按鈕或錨的一些.onclick()
處理程序進行,你應該確保你已經通過返回false,否則你的AJAX調用取消默認的動作將在瀏覽器重定向離開頁面之前,沒有時間去執行。
例子:
$('#myForm').submit({
$.post("<receiver>", postdata, function() {
...
});
return false; // <!-- That's the important bit
});
你的警覺導致您的腳本暫停,因此讓時間爲你$.post()
完成。
你應該把你的重定向腳本放在你的$.post()
回調中。
因爲它會導致延遲。當您按下確定時,請求(至少需要幾毫秒)纔會完成,並且可以依照它進行操作。
爲了防止發生這種情況,您可以傳遞一個回調函數,該函數在請求獲得響應後運行。
$.post(url, postdata, function() {
// Success.
})
.post是異步的。
如果您在發佈過程()期間更改頁面,POST請求將被中止。 您的alert
正在阻止此頁面更改
您應該用.ajax同步請求替換.post,驗證成功提交表單提交(return true;
)。或者按照@DarinDimitrov或@Curt建議的那樣做
啊,所以你的問題的缺失部分似乎是你正在發送數據點擊某件事是嗎?推測是一個鏈接?該鏈接會使瀏覽器立即關注它,並且在您的示例中,警報足以延遲瀏覽器,使您的帖子有足夠的時間完成。
您需要確保該鏈接的默認操作被阻止,並在$的回調中執行重定向。後()代替:
$("a.some_class").click(function(evt)
{
evt.preventDefault(); // makes sure browser doesn't follow the link
// gather your post data here ...
var $this = this;
$.post("<receiver>", postdata, function()
{
window.location.href = $this.attr("href");
});
})
但我需要使用標準事件處理程序將所有參數傳遞到新頁面。是否可以使用preventDefault,然後再次發佈後調用默認處理程序? – Dmitry 2013-02-22 09:55:37
我需要更多信息:你確實點擊了一個鏈接?什麼是你所指的「所有參數」?你的意思是查詢字符串參數?如果是,我上面粘貼的代碼使用標籤的原始href屬性。因此,如果該屬性包含查詢字符串參數,它們將會發送得很好。實際上,它只是延遲點擊鏈接的默認執行。 – 2013-02-22 10:00:34
看一看這個問題進行了廣泛的解釋:http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-呼叫從-A-功能。 – 2013-02-22 09:52:34