0

我有一個谷歌的Chrome擴展程序(瀏覽器操作)發送彈出的形式投入到我的流星網站/應用程序的數據庫。 (上Log in to a meteor app from a Google chrome extension爲主。)不一致XHR流星託管網站(meteor.com)

上popup.js的XHR代碼:

$(document).ready(function() { 
    $('#form').on('click','#submitForm',function() { 
    var xhr = new XMLHttpRequest(); 
    var data = { 
        "field1": $('#input1').val(), 
        "field2":$('#input2').val(), 
       }; 
    xhr.open("POST", "http://MYAPPNAME.meteor.com/extension/post", true); 
    xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8'); 
    xhr.send(JSON.stringify(data)); 
    }); 
}); 

代碼工作非常零星。通常在第四次嘗試時(即,表格的四次提交)。

什麼引起這種不一致?它只是meteor.com上免費託管緩慢的一個方面?我可能會切換到自定義域名(付費服務器上),但最好在付款前確保功能。

編輯

我添加事件偵聽器XHR錯誤(從https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest),按克桑的建議。

xhr.addEventListener("progress", updateProgress, false); 
xhr.addEventListener("load", transferComplete, false); 
xhr.addEventListener("error", transferFailed, false); 
xhr.addEventListener("abort", transferCanceled, false); 

現在每次都會出現「中止」(transferCanceled)警報。但是,數據仍會偶爾發送(即使出現錯誤警報)。

這是任何說明?有沒有更好的方法來提醒錯誤?

+0

我總是寧可持懷疑態度,當涉及到發送,而不是「正常」的URL參數,如'field1的=值1&Field2則=數值JSON '。你嘗試過嗎? – devnull69 2014-12-03 07:16:53

+1

爲XHR上的錯誤添加偵聽器,並在可能的情況下檢查服務器日誌。沒有這些信息很難診斷。 – Xan 2014-12-03 09:02:58

+0

@Xan新增聽衆。見上面的編輯。無法訪問服務器日誌,但會嘗試使用localhost。 – AvidSnacker 2014-12-03 23:36:45

回答

1

我想這個請求是因爲表單被提交而中止的。嘗試單擊處理程序取消默認動作(表單提交):

$('#form').on('click', '#submitForm', function(event) { 
    event.preventDefault(); 
    .... 
}); 

,你可能想使用窗體的submit事件來代替。這使用戶能夠打輸入提交表單而不是點擊一個按鈕:

$('#form').on('submit', function(event) { 
    event.preventDefault(); 
    .... 
}); 
+0

Presto。只需要添加'event.preventDefault();' – AvidSnacker 2014-12-04 01:10:41