XMLHttpRequest发送请求两次

时间:2018-12-14 07:08:29

标签: google-chrome-extension cors codeigniter-3 preflight

下面是我的Chrome扩展程序在后台任务中的一个功能。它工作正常,并将json数据发送到服务器。服务器收到它并对其进行处理。问题是服务器立即看到另一个相同的请求。此时浏览器会收到“未捕获的SyntaxError:JSON输入意外结束”错误。

    function send_to_logger_survey(request, sender, sendResponse)
{
var myArray=[];
var jsonResponse2;

myArray.push(email);
myArray.push(request.values);  //contains chosen values
var json = JSON.stringify(myArray);
var url=szHost;
url=url.concat('/Subit_backend/logger_survey');
var xhr = new XMLHttpRequest();
xhr.onerror = function() { alert('error'); };
xhr.open('POST', url, true);
xhr.setRequestHeader("Content-type", "application/json");
xhr.setRequestHeader("X-Requested-With",'xmlhttprequest');
xhr.setRequestHeader("Access-Control-Allow-Origin", "*");

xhr.onload = function (){
    if((xhr.status === 200)&&(xhr.readyState===4)) {
            var jsonResponse2 = JSON.parse(xhr.responseText);
            sendResponse({task: jsonResponse2});
          return true; //The sendResponse callback is only valid if used synchronously, or if the event handler returns true to indicate that it will respond asynchronously.   
        }
};

xhr.send(json);
}

我不“认为”我的JavaScript代码实际上在进行两次调用。我认为也许是在我的Codeigniter代码获取并处理了请求之后,正在发送缓冲区的第二个副本。还是上面的代码正在发送同一缓冲区的两个副本?任何想法如何调试此问题?

1 个答案:

答案 0 :(得分:0)

您看到的问题可能是由于预检。处理CORS的服务器会显示一些内容。浏览器发送两个请求,一个使用OPTIONS方法,第二个使用POST。这是基于您的服务器配置

如果您取消评论

XHR.setRequestHeader('X-Requested-With', 'XMLHttpRequest');

您可能只会看到一个请求,但这可能无法给您所需的答复。

您可能想使用

在codeigniter中手动处理预检
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
// send OK without processig
}}