Сообщение XMLHttpRequest не работает?

#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 . Не знаю, что было причиной этого.