Два буфера отправляются через XMLHttp - PullRequest
0 голосов
/ 25 декабря 2018

Я пытался спросить об этом раньше, но на этот раз постараюсь быть более информативным.У меня есть всплывающее окно с расширением 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...