2013-05-17 58 views
-1

我需要將單個表單發佈到2個不同的URL。一個只是一個日誌腳本,所以響應不需要傳回給用戶。表單POST到2 URL

不幸的是,在這種情況下,我不能只發布到一個PHP腳本,並轉身使用Curl重新張貼它。這必須在用戶的瀏覽器中完成。

這是我現在正在使用的一些JavaScript,但它幾乎所有主流瀏覽器的表面上看似隨機的速度都很慢(但工作時間爲95%)。表單的其餘部分確實需要使用Javascript才能運行,所以我知道問題不僅僅在於某些用戶關閉了Javascript。

function makePOSTRequest(url, parameters) { 

    http_request = false; 

    if (window.XMLHttpRequest) { // Mozilla, Safari,... 

    http_request = new XMLHttpRequest(); 

    if (http_request.overrideMimeType) { 

     http_request.overrideMimeType('text/html'); 
    } 
    } else if (window.ActiveXObject) { // IE 
    try { 
     http_request = new ActiveXObject("Msxml2.XMLHTTP"); 
    } catch (e) { 
     try { 
      http_request = new ActiveXObject("Microsoft.XMLHTTP"); 
     } catch (e) {} 
    } 
    } 
    if (!http_request) { 
    alert('Cannot create XMLHTTP instance'); 
    return false; 
    } 

    http_request.open('POST', url, true); 
    http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    http_request.setRequestHeader("Content-length", parameters.length); 
    http_request.setRequestHeader("Connection", "close"); 
    http_request.send(parameters); 

}

我打電話,在另一個函數手動建立請求後,然後調用形式提交()函數。

任何人都可以提出一個可能更好的替代方案嗎?這似乎正在工作〜95%的時間,但5%的失敗率是一個殺手...謝謝!

+1

您是否嘗試過使用jquery來管理您的ajax請求? –

+0

爲什麼不在同一個文件中包含同一個文件或進程中的日誌文件?如果服務器不同,請通過php curl來完成。 –

+1

就像一個預感:嘗試雙擊表單。有些人傾向於這樣做,它可能會失敗其中的一個帖子或重複他們 – MarZab

回答

0

嘗試使用支持錯誤檢查的任何嘗試在失敗時重複請求的框架。

像jQuery這樣的JavaScript框架支持發送post請求,並且可以用來檢查請求是否成功。此外,您的代碼將更容易編寫和維護。

+0

我應該包括一個說明,我不能在這個實例中使用jQuery。長長的故事,但相信我,我希望我能!我仍然會繼續接受,因爲這可能是解決問題的最佳方案。那麼,你關於檢查雙擊的建議可能是真正的罪魁禍首! –