1

В сценарии содержимого моих веб-приложений Firefox добавлен XMLHttpRequest. Вопрос: почему статус этого запроса всегда равен 0?Состояние XMLHttpRequest 0 для Firefox 49.0.2 Добавить в

Это код JavaScript, сделавшего запрос:

var query = "http://api.wolframalpha.com/v2/query?appid=[MY-APP-ID]&includepodid=Comparison&scanner=Unit&format=plaintext&input=1%20lm"; 
var xhttp = new XMLHttpRequest(); 
xhttp.onreadystatechange = function() 
{ 
    console.log("onreadystatechange"); 
    console.log(this); 
    if (this.readyState == 4 && this.status == 200) 
    { 
     onSuccess(this.responseText); 
    } 
}; 
xhttp.open("GET", query, true); 
xhttp.send(); 

Если я распечатать результаты запроса для каждого onreadystatechange вызова, я получаю:

XMLHttpRequest { onreadystatechange: makeWolframRequest/xhttp.onreadystatechange(), 
    readyState: 1, timeout: 0, withCredentials: false, upload: XMLHttpRequestUpload, 
    responseURL: "", status: 0, statusText: "", responseType: "", response: "" } 
XMLHttpRequest { onreadystatechange: makeWolframRequest/xhttp.onreadystatechange(), 
    readyState: 2, timeout: 0, withCredentials: false, upload: XMLHttpRequestUpload, 
    responseURL: "", status: 0, statusText: "", responseType: "", response: "" } 
XMLHttpRequest { onreadystatechange: makeWolframRequest/xhttp.onreadystatechange(), 
    readyState: 4, timeout: 0, withCredentials: false, upload: XMLHttpRequestUpload, 
    responseURL: "", status: 0, statusText: "", responseType: "", response: "" } 

Вещи, которые я проверил:

+0

Событие 'readystatechange' срабатывает всякий раз, когда изменяется readistate, первые три происходят до того, как сервер отвечает, и вы не можете иметь код состояния, прежде чем вы получите ответ, поэтому он' 0' первые три раза, и поэтому мы проверяем, что 'readystate' равен' 4', поскольку это означает, что получен ответ. Вероятно, проблема заключается не в коде состояния для трех первых вызовов «readystatechange», а в другом. – adeneo

+0

Из моих экспериментов значение readstate logs равно 1, 2, а затем 4. Я бы согласился, что состояние 0 имеет смысл для состояний 1 и 2 (в первых двух журналах), но readistate of 4 в сочетании со статусом 0 почему я обеспокоен. – Gladclef

+0

Если статус по-прежнему равен «0», когда readistate равен «4», это обычно указывает на некоторые другие проблемы. У меня нет идентификатора приложения, и я не могу проверить это, но я бы предположил, что это ошибка CORS. Вы установили правильные разрешения для своего скрипта, вы не можете выполнять перекрестные вызовы, не разрешая его, запрашивая правильные разрешения? – adeneo

ответ

0

В данном случае это проблема CORS. Я должен добавить этот секретный соус к моему manifest.json файла:

"permissions": [ 
    "http://api.wolframalpha.com/*" 
] 

Более подробная информация здесь: https://developer.mozilla.org/en-US/Add-ons/WebExtensions/manifest.json/permissions

Большое спасибо @adeneo за настаивая я продолжаю смотреть на проблемы CORS.

+0

Эта проблема почти наверняка произвела некоторый вывод в [Консоль браузера] (https://developer.mozilla.org/en-US/docs/Tools/Browser_Console) (Ctrl-Shift-J или Cmd-Shift-J on OSX), когда вы выполнили этот код, который дал бы вам хорошую идею относительно проблемы. Существуют также [другие консоли] (http://stackoverflow.com/a/38920982/3773011), на которые вы могли бы посмотреть информацию об этой проблеме. – Makyen