下面是我的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代码获取并处理了请求之后,正在发送缓冲区的第二个副本。还是上面的代码正在发送同一缓冲区的两个副本?任何想法如何调试此问题?
答案 0 :(得分:0)
您看到的问题可能是由于预检。处理CORS的服务器会显示一些内容。浏览器发送两个请求,一个使用OPTIONS
方法,第二个使用POST
。这是基于您的服务器配置
如果您取消评论
XHR.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
您可能只会看到一个请求,但这可能无法给您所需的答复。
您可能想使用
在codeigniter中手动处理预检if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
// send OK without processig
}}