Проект PhoneGap Ionic не выполняет $ http.post на устройстве iOS

0

Я использую Ionic framework для создания приложения html5, которое затем развертывается на устройстве iOS с помощью PhoneGap. Все работало отлично, затем мы переключили некоторые серверные адреса, которые использовались для того, чтобы данные включали номер порта в адрес, а метод HTTP был переключен с GET на POST. После того, как коммутатор был протестирован локально в браузере, он без проблем загружал данные. Когда мы были развернуты на устройстве, мы ничего не увидели в журналах, когда запрос был выполнен, а обработчик успеха или ошибки не был достигнут. В приведенном ниже коде печатается только "ЗДЕСЬ1", и все останавливается.

console.log("HERE1");
$http.post("http://XX.XX.XX.XX:81/api/Authenticate", null ,{ headers: {'Authorization': 'Basic ' + encodedNamePw} })
            .success(function (data, status, headers, config) {
                console.log("HERE2");
            })
            .error(function (data) {
                console.log("HERE3");
            });

Затем я попытался выполнить GET по тому же адресу, и я получил ответ, сказав, что у меня, очевидно, был неправильный метод. Затем я попробовал POST по адресу без порта, и у меня появился ответ, который снова был ошибкой, но, по крайней мере, я получил ответ. Итак, чтобы обобщить его, он работает локально в браузере, он работает на устройстве iOS с запросом GET и PORT, но он не делает никакого запроса, когда я использую метод POST. Я пытался избежать толстой кишки, но это не помогло. Я довольно озадачен этим, поэтому любые мысли оцениваются. Благодарю!

  • 0
    Просто заметка, я пробовал это с Jquery, и у меня была та же проблема
Теги:
cordova
ionic

1 ответ

0

После долгих страданий я обнаружил проблему и доступные варианты. Проблема заключалась в том, что мы получали ответ 401 и http-аутентификацию http-заголовка. Когда это отправляется сервером, очевидно, что iOS пытается открыть диалоговое окно входа в систему, которое заблокировано PhoneGap. Вместо того, чтобы использовать метод обратного вызова ошибки, он просто ест его, и вы никогда не получите никакой обратной связи, что запрос был завершен.

Лучшее решение требует, чтобы у вас был доступ к серверу, который вы вызываете. Если вы это сделаете, и вы можете обновить ответ, чтобы не отправлять заголовок www-authenticate для ответов 401, тогда вы являетесь золотым, и он работает так, как ожидалось. Если вы не можете, у вас есть возможность установить для параметра async значение false в запросе. Этот подход будет блокироваться в пользовательском интерфейсе, что не является идеальным, но может быть приемлемым, если это просто запрос на вход. Удачи.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню