2012-11-19 90 views
0

我在將「發佈」到不同站點作爲會話轉移到我正在使用的公司的一部分時遇到了問題。他們要求我們通過查詢字符串中的會話令牌(是的,請求中沒有主體)通過「發佈」請求導航到他們的網站。發佈到不同的域偶爾失敗

這是我使用POST請求的代碼:我正是如此稱它

navigateByPost = function(path, parameters) 
{ 
    var form = $('<form />'); 

    form.attr("method", "post"); 
    form.attr("action", path); 

    parameters && $.each(parameters, function (key, value) 
    { 
     var field = $('<input />'); 

     field.attr("type", "hidden"); 
     field.attr("name", key); 
     field.attr("value", value); 

     form.append(field); 
    }); 

    $(document.body).append(form); 
    form.submit(); 
} 

navigateByPost('http://other.site/login/?parameter1=sessiontokenhere'); 

大多數時候,這個工作正常,但有時,以完全隨機的間隔,我看到請求被取消,並且導航從不發生。這是我在Chrome瀏覽器開發工具,我看到當導航失敗:

Screenshot of the request failure from the Chrome dev tools

我已經在Firefox檢查,似乎問題並沒有出現,所以我不知所措到實際問題是什麼。我知道在其他方面這不會成爲問題,因爲它不可能在一毫秒內完成並被拒絕。它一定是瀏覽器中的東西,但我不知道。

請幫幫我,夥計們,我正在用盡我的頭!

+0

如果在調用navigateByPost()時缺少「path」變量,還是有一些魔術發生,我沒有看到? –

+0

是否在有擔保和無擔保之間發佈數據?即http/https ?! – devsathish

+0

@limelights我在調用中包含了路徑,但沒有任何參數需要發送,因此爲什麼第二個參數是空的。 – brins0

回答

0

我發現上面顯示的代碼實際上可以正常工作。我發現附帶代碼的鏈接是實際導致問題的原因。

之前,我漸漸的元素是這樣的:

$(document).on("click", "a.sessiontransfer", function(e) { 
    e.PreventDefault(); 
    doSessionTransfer(); 
    return false; 
}); 

因此,如果任何額外的鏈接被添加到頁面,他們會拿起這個功能。我發現這100%的時間無法正常工作,偶爾會產生我在截圖中粘貼的錯誤。我已經改變了以下;

$("a.sessiontransfer").off().on("click", function(e) { 
    e.PreventDefault(); 
    doSessionTransfer(); 
    return false; 
}); 

我還沒有這個失敗,我試圖在任何設備上,卻有着不幸的副作用,如果我添加到頁面中的任何鏈接,我將不得不重新通話此功能可以重新綁定所有元素,確保先刪除現有點擊。

我希望這將有助於挽救某人幾天的調查時間,並在此過程中節省幾張桌子!