#javascript #android #cordova #xmlhttprequest
#javascript #Android #кордова #xmlhttprequest
Вопрос:
Я пытаюсь отправить некоторые данные на сервер, но он возвращает мне статус 0, он не работает только на Android 4.2.2, поскольку я работаю над приложением cordova. Проблема в междоменности? Я также попробовал Access-Control-Allow-Origin = * в заголовке и config.xml .
var req = new XMLHttpRequest();
if (!method)
method = "POST";
if (!contentType)
contentType = "application/x-www-form-urlencoded";
req.open(method, url, true);
req.setRequestHeader("Content-type", contentType);
req.setRequestHeader("Accept", "application/json,text/javascript,");
var timeoutHandler = function() {
//console.log("timeoutHandler: readyState: " req.readyState);
if (req.readyState >= 2)
return;
if (window.sus)
window.sus.updateLimitedConn(true);
if (err)
err(1001);
req.abort();
};
var reqTimeoutID = setTimeout(timeoutHandler, 30000);
req.onload = function() {
//console.log("xhr onload: readyState: " req.readyState ", status: " req.status);
if (req.readyState != 4)
return;
clearTimeout(reqTimeoutID);
if (req.status == 200) {
if (window.sus)
window.sus.updateLimitedConn(false);
if (suc)
suc(req.responseText);
}
else {
if (window.sus amp;amp; (req.status == 408 || (req.status >= 500 amp;amp; req.status <= 599)))
window.sus.updateLimitedConn(true);
if (err)
err(req.status);
}
};
req.onerror = function() {
//console.log("xhr onerror: readyState: " req.readyState ", status: " req.status);
clearTimeout(reqTimeoutID);
if (err)
err(1002);
};
req.send(data);
Комментарии:
1. Поскольку cordova работает в webview, проблем с междоменностью нет (при условии, что у вас есть доступ origin =»*» в config.xml ). Вы говорите, что он не работает только в Android 4.2.2, вы имеете в виду, что он работает на других платформах с cordova? Может быть, вы могли бы записать ответ, который вы получаете при сбое?
2. Это исправлено, мне пришлось вызвать super.init(); в моей основной деятельности, где я загружал страницу index.html . Не знаю, что было причиной этого.
Ответ №1:
Я думаю, что у меня была похожая проблема. Попробуйте это:
В вашей кордове config.xml добавление файла:
<access origin="*" />
В вашем AndroidManifest.xml (платформы / Android /) добавить:
<uses-permission android:name="android.permission.INTERNET" />
Удачи!
Комментарии:
1. Я добавил это. Это исправлено, мне пришлось вызвать super.init(); в моей основной деятельности, где я загружал страницу index.html . Не знаю, что было причиной этого.