XMLHttpRequest отправляет запрос дважды - PullRequest
0 голосов
/ 14 декабря 2018

Моя функция в фоновом режиме для моего расширения Chrome приведена ниже.Он отлично работает и отправляет данные JSON на сервер.Сервер получает это и обрабатывает это также хорошо.Проблема в том, что сервер сразу видит другой такой же запрос.Браузер в этот момент получает ошибку «Uncaught 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 голосов
/ 14 февраля 2019

Проблема, которую вы видите , может быть из-за предполетной проверки.Что-то, что вы увидите с серверами, которые обрабатывают CORS.Браузер отправляет два запроса, один с использованием метода OPTIONS, а второй с использованием POST.Это основано на конфигурации вашего сервера

, если вы раскомментируете

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

, вы можете увидеть только один запрос, но он может не дать желаемого ответа.

Вы можетехотите обработать предпечатную проверку вручную с помощью

if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
// send OK without processig
}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...