Я пытался спросить об этом раньше, но на этот раз постараюсь быть более информативным.У меня есть всплывающее окно с расширением Chrome.Когда пользователь хочет записать сообщение из моего внешнего вида в мой бэкэнд, он нажимает «отправить».В моей фоновой задаче я использовал onMessage.addListener
.Когда этот фоновый прослушиватель получает request.task == "log_results_survey"
(что означает, что пользователь нажал "Отправить" во всплывающей задаче), он запускается:
if (request.task =="log_results_survey"){
send_to_logger_survey(request, sender, sendResponse);
console.log("sent to logger_survey\n");
};
Send_to_logger_survey (также в фоновой задаче) появляется ниже:
function send_to_logger_survey(request, sender, sendResponse)
{
var myArray=[];
var jsonResponse2;
var d=new Date();
myArray.push(email);
myArray.push(request.values); //contains chosen values
myArray.push(Math.random()); //push random number
console.log("sent to server\n");
var json = JSON.stringify(myArray);
var n = json.length; //this must be less than 1472 to avoid fragmentation
var url=szHost;
url=url.concat('/Subit_backend/logger_survey');
var xhr2 = new XMLHttpRequest();
xhr2.onerror = function() { alert('error'); };
xhr2.open('POST', url, true);
xhr2.setRequestHeader("Content-type", "application/json")
xhr2.setRequestHeader("X-Requested-With",'xmlhttprequest');
xhr2.setRequestHeader("Access-Control-Allow-Origin", "*");
xhr2.onload = function (){
if((xhr2.status === 200)&&(xhr2.readyState===4)) {
if (xhr2.responseText==="")
var jsonResponse2="empty";
else
var jsonResponse2 = JSON.parse(xhr2.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.
}
};
xhr2.send(json);
}
То, что я вижу (на сервере, а также с Wireshark), это то, что он отправляет две копии одного и того же буфера с двух смежных портов на клиенте (49814 и 49815)!Вы можете увидеть их в буферах 41 и 42. Любая идея, как я могу вернуть это только к одной копии буфера?
Странная деталь: когда я смотрю на два случайных числа, которые были получены хостом, они различаются в двух разных буферах.Кажется, что send_to_logger_survey()
работает дважды, но с отладчиком я вижу, что он останавливается только на точке останова один раз.![wireshark capture](https://i.stack.imgur.com/VLRUS.jpg)