Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google chrome extension XMLHttpRequest正在发送两次请求_Google Chrome Extension_Cors_Codeigniter 3_Preflight - Fatal编程技术网

Google chrome extension XMLHttpRequest正在发送两次请求

Google chrome extension XMLHttpRequest正在发送两次请求,google-chrome-extension,cors,codeigniter-3,preflight,Google Chrome Extension,Cors,Codeigniter 3,Preflight,我的Chrome扩展的后台任务中的a函数如下所示。它工作正常,并将json数据发送到服务器。服务器接收并处理它也很好。问题是服务器会立即看到另一个相同的请求。此时浏览器会收到一个“未捕获的语法错误:JSON输入的意外结束”错误 我并不认为我的javascript代码实际上在进行两次调用。我认为,在我的Codeigniter代码获得并处理请求之后,可能会发送缓冲区的第二个副本。或者上面的代码正在发送同一缓冲区的两个副本?知道如何调试这个问题吗 您看到的问题可能是由于飞行前的操作造成的。在处理COR

我的Chrome扩展的后台任务中的a函数如下所示。它工作正常,并将json数据发送到服务器。服务器接收并处理它也很好。问题是服务器会立即看到另一个相同的请求。此时浏览器会收到一个“未捕获的语法错误:JSON输入的意外结束”错误

我并不认为我的javascript代码实际上在进行两次调用。我认为,在我的Codeigniter代码获得并处理请求之后,可能会发送缓冲区的第二个副本。或者上面的代码正在发送同一缓冲区的两个副本?知道如何调试这个问题吗

您看到的问题可能是由于飞行前的操作造成的。在处理COR的服务器上会看到一些东西。浏览器发送两个请求,一个使用
OPTIONS
方法,另一个使用
POST
。这取决于您的服务器配置

如果你不发表评论

XHR.setRequestHeader('X-request-With','XMLHttpRequest');
您可能只看到一个请求,但这可能不会给您所需的响应

您可能希望在codeigniter中使用

if($\u服务器['REQUEST\u METHOD']=='OPTIONS'){
//发送OK而不进行处理
}}
您看到的问题可能是由于飞行前的操作造成的。在处理COR的服务器上会看到一些东西。浏览器发送两个请求,一个使用
OPTIONS
方法,另一个使用
POST
。这取决于您的服务器配置

如果你不发表评论

XHR.setRequestHeader('X-request-With','XMLHttpRequest');
您可能只看到一个请求,但这可能不会给您所需的响应

您可能希望在codeigniter中使用

if($\u服务器['REQUEST\u METHOD']=='OPTIONS'){
//发送OK而不进行处理
}}

我认为
返回true
应该位于函数的末尾,以保持端口打开,而不是位于签名的回调函数
(请求、发送方、发送响应)
这是
onMessage
的处理程序。因此,问题一定在于如何注册该处理程序以及该处理程序位于扩展的哪个部分。照目前的情况,问题中没有足够的信息来诊断您的问题。Xan,是的。用户界面与弹出脚本。弹出脚本向后台脚本发送消息。后台脚本对服务器执行xhr。后台脚本获取响应并将其发送到弹出脚本,以向用户提供反馈应该位于函数的末尾,以保持端口打开,而不是位于签名的回调函数
(请求、发送方、发送响应)
这是
onMessage
的处理程序。因此,问题一定在于如何注册该处理程序以及该处理程序位于扩展的哪个部分。照目前的情况,问题中没有足够的信息来诊断您的问题。Xan,是的。用户界面与弹出脚本。弹出脚本向后台脚本发送消息。后台脚本对服务器执行xhr。后台脚本获得响应并将其发送到弹出脚本,以向用户提供反馈。嗨@Daniel,谢谢你的回答!你知道如何通过nginx禁用飞行前的功能吗?(我让jenkins发送了两次请求——用户也通过XHR向我发送了两次反馈)问题在于设置选项以返回2**响应,而不是由应用程序处理。你可以看看这个例子。啊,现在我明白了!(2**=204在您的代码中,首先我没有意识到)谢谢您,@Daniel!嗨,丹尼尔,谢谢你的回答!你知道如何通过nginx禁用飞行前的功能吗?(我让jenkins发送了两次请求——用户也通过XHR向我发送了两次反馈)问题在于设置选项以返回2**响应,而不是由应用程序处理。你可以看看这个例子。啊,现在我明白了!(2**=204在您的代码中,首先我没有意识到)谢谢您,@Daniel!
    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);
}