2012-12-13 77 views
0

我試圖使用JSONP在一個表單提交頁面上,從服務器B.使用JSONP表單上提交

這裏將數據推到服務器A有關計時問題是我的JS -

my.submitOrder = function() { 

    var scriptTag = document.createElement('SCRIPT'); 
    scriptTag.src = ServerAUrl + "?" + urlData; 
    scriptTag.type = "text/javascript"; 
    scriptTag.async = 0; 

    document.getElementsByTagName('HEAD')[0].appendChild(scriptTag); 

}; 

我想有這個js當用戶提交表單所以這裏執行的,我認爲會完成這項工作的HTML -

<form action="http://localhost:3348" onsubmit="return my.submitOrder();" > 
    <input type="submit" value="submit" /> 
</form> 

的提交情況優良,submitOrder函數執行,但我打電話給ServerAUrl在它到達服務器A之前被「取消」(根據螢火蟲)。實際上,它大約成功地進行了5次,但似乎沒有任何模式。我知道這樣的事情是可能的,因爲谷歌分析做它。有任何想法嗎?

+0

無論'ServerAUrl'也不'urlData'有值? – Bergi

+0

這些是片段,JS運行正常,問題在於當表單提交時,取消對服務器A的請求。 – Nick

+0

您的jsonp函數是否具有任何回調函數?此外,爲什麼不使用正常Ajax請求? – Bergi

回答

1

您並未阻止提交事件,因此表單將像往常一樣通過加載目標頁面來發送。在卸載過程中,打開的請求(如JSONP腳本)被取消。

爲了防止事件的默認操作,使用advanced event registration或從您的在線處理程序只是return false尤其是當調用其preventDefault方法(目前,你正在返回undefined

+0

雖然我不想取消表單發佈。我想將數據發送到服務器A並提交表單。 – Nick

+1

呃,爲什麼?但是,您需要防止默認提交,等待jsonp請求成功,然後您可以通過'myform.submit()手動提交它' – Bergi