XMLHttpRequest не может загрузить URL-адрес с некоторыми IP-адресами и портами

#javascript #android #xmlhttprequest

#javascript #Android #xmlhttprequest

Вопрос:

— ОГРОМНАЯ ПРАВКА СДЕЛАНА 24.10 —

У меня есть мобильное приложение, где первое действие, которое должен выполнить пользователь, это ввести IP и порт сервера, который он хочет использовать для сохранения, получения информации и т.д.

Когда пользователь отправляет IP-адрес и порт, которые он ввел в поля, предполагается, что каждый случай будет обработан, включая случаи сбоя, если он ввел неверную информацию, или сервер не работает, или у его мобильного телефона нет сети.

Я сосредоточусь здесь на случаях, когда сеть в порядке и сервер тоже, поэтому проблема в том, что пользователь ввел в поля.

Вот запрос:

 [...]
SOAPRequete = SOAPRequete   '</mns:'   _methode   '>'   '</SOAP-ENV:Body>'   '</SOAP-ENV:Envelope>';

    console.log('A');

    var request = new XMLHttpRequest();

    console.log('B');

    request.open("POST", "http://"   _ip   ":"   _port   "/4DSOAP", true);

    console.log('C');

    request.onreadystatechange = function() {
        console.log('D');
        if (request.readyState == 4) {
            console.log('E');
            if (request.status == 200) {
                _callbackSuccess(request.responseXML);
            } else {
                console.log('F');
                _callbackFailure(request.responseXML);
            }
        }
    }
    request.send(SOAPRequete);
  

Я пытался:

  1. IP ‘какой угодно’ и порт ‘12345’
  2. IP ‘whatever’ и порт ‘whoocares’
  3. IP ‘whatever’ и порт ничего
  4. IP ничего и порт ничего
  5. IP ничего, а порт ‘12345’

Я пробовал это на двух телефонах.

На первом телефоне callbackFailure вызывается в каждом случае, что хорошо. Отображаются журналы от ‘A’ до ‘F’.

На втором телефоне тесты 1 и 3 в порядке (вызывается callbackFailure), но тесты 2, 4 и 5 останавливаются после входа в журнал ‘C’. Экран зависает, после чего больше ничего не регистрируется (нет ошибок Android, Eclipse или Chrome).

И есть кое-что еще: в случаях, которые не работают на втором телефоне, но работают на первом (2, 4 и 5), есть журнал между журналами ‘C’ и ‘D’ (поэтому, когда он зависает на втором телефоне):

XMLHttpRequest не удается загрузить http://whatever:Whocares/4DSOAP . Не удалось начать загрузку.

Таким образом, кажется, что запрос просто не может быть выполнен в некоторых случаях (IP не указан, порт указан строкой), и первый телефон вызывает callbackFailure, когда второй телефон ничего не делает.

Комментарии:

1. Я внес огромную правку.

Ответ №1:

вы пробовали это?

 SOAPRequete = SOAPRequete   '</mns:'   _methode   '>'   '</SOAP-ENV:Body>'   '</SOAP-ENV:Envelope>';
SOAPRequete = escape(SOAPRequete);
  

Комментарии:

1. Я пробовал, но это ничего не меняет. Действительно, я отредактировал свой вопрос, потому что кажется, что он работает на телефоне, но не на другом.