Javascript не работает на мобильном телефоне (Android), но хорошо на рабочем столе - PullRequest
0 голосов
/ 18 февраля 2020

Я искал в архивах, но не нашел ничего, что указывало бы c на мой запрос.

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

const getPostCodeLatLng = (strPostCode, callback) => {
    alert("used API"); // !!! DOESN'T ALERT ON MOBILE !!!
    const request = new XMLHttpRequest();
    request.addEventListener('readystatechange', () => {
        if(request.readyState == 4){
            const jsnPostCode=JSON.parse(request.responseText);
            callback(jsnPostCode);}});
    request.open('GET', 'http://api.getthedata.com/postcode/' + strPostCode);
    request.send();
};

и

getPostCodeLatLng(strInputFieldValue, (jsnPostCode) => { // use the function to get data about the postcode and callback to this function
            if(jsnPostCode.status=="match"){
                alert("used API"); // !!! DOESN'T ALERT ON MOBILE !!!
                let strPostCodeLatLng = "LatLng(" + jsnPostCode.data.latitude + ", "
                + jsnPostCode.data.longitude + ")";
                setFieldswithLatLng(strPostCodeLatLng);
                objDisplayFindCons.value=`Postcode: ${strInputFieldValue}`;}
            else objDisplayFindCons.value=`No match found for Postcode: ${strInputFieldValue}`;})

Функции отлично работают на рабочем столе, но не работают ни на телефоне Samsung, ни на планшете. Я использую Chrome на всех устройствах.

Второй раздел кода является частью большего раздела, который отвечает на событие, когда данные вводятся в текстовое поле, проверяется как возможный почтовый индекс (с использованием регулярных выражений). ) и затем запрашивается согласно первой функции. Текстовый ответ JSON затем анализируется и проверяется, найдено ли совпадение (сервер возвращает действительный JSON для необнаруженных почтовых индексов).
Я ясно, что все работает нормально, пока не встретит вызов функции getPostCodeLatLng() где он никогда не запускает ни одного из операторов alert("used API") на мобильном телефоне.

Я новичок в JavaScript и считаю сложные функции и события обратного вызова кодирования, но я не вижу каких-либо очевидных ошибок / причин для этого Ошибка на мобильных устройствах.

Есть ли известные проблемы или ограничения в том, что я делаю?

Есть ли способ обойти это или эффективно отладить на мобильном?

Пожалуйста помогите!

Спасибо,

Фил

1 Ответ

0 голосов
/ 19 февраля 2020

Итак, я пробовал разные вещи и обнаружил, что проблема связана с использованием запроса http.

Очевидно, что теперь все запросы от браузера Chrome на Android должны быть https .

Таким образом, изменение request.open('GET', 'http://api.getthedata.com/postcode/' + strPostCode); на request.open('GET', 'https://api.getthedata.com/postcode/' + strPostCode); сразу решило проблему.

Вот статья, в которой упоминается изменение: -
https://www.thesslstore.com/blog/https-will-now-be-the-default-for-all-android-p-apps/

Вы живете и учитесь ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...