Междоменный AJAX-запрос странно ведет себя в родном браузере телефона Android - PullRequest
1 голос
/ 14 декабря 2010

Мои настройки выглядят так:

  • База данных SQLite находится в одной из моих папок Apache
  • Сценарий Perl cgi находится в той же папке с общедоступными разрешениями, так чтоон может обрабатывать взаимодействия с базой данных
  • Программа переменного тока, работающая на той же машине, прослушивает определенный порт для определенных запросов JSON и отвечает специально отформатированными данными JSON

Веб-страница, написаннаяв основном в jQuery и HTML, должен иметь постоянный доступ к базе данных SQLite и программе на Си.Это делается с использованием запросов AJAX - вот пример из кода:

function sendCommand(cmd, callback) {
$.ajax({url: "http://192.168.42.90:6112/?cmd=" + cmd,
    dataType: "jsonp",
    success: function(d,s,x) {
          callback(d);
    },
    jsonpCallback: "json",
    error: function(xhr) {
         alert('Error: ' + xhr.status);
    }
});
}

Так что я мог бы вызвать его с помощью чего-то вроде sendCommand ("get_x", updatePosition) - так, чтобы он отправлял get_xвведите команду вместе с программой на C и, если она получит хороший отзыв, запустите указанный отзыв с помощью функции updatePosition.

Так что все это работает ОТЛИЧНО, если я работаю на веб-странице на том же компьютере.Если я перееду на другую машину - в данном случае, в частности, на телефон Android, который выполняет привязанный IP через USB, это ... вроде как работает.Это то, что меня озадачивает - оно не перестает молчать, как я привык к JavaScript.Вместо этого, насколько я могу судить, он отправляет запрос, утверждает, что получил данные обратно, и запускает функцию обратного вызова - только, согласно программе на C, ничего не происходило;согласно Wireshark, пакеты не были отправлены;и «данные», которые он возвращает, представляют собой пустую, специально отформатированную строку.Если я ожидаю, что "(5,5)" будет выводиться из C, он получит "(0,0)" - почему он вообще что-то получает?Гораздо меньше заполнения "(,)" нулями?

Очень странно.Я пробовал разные мелочи, такие как изменение dataType на «json», проверка правильности всех моих разрешений и т. Д. Я вполне уверен, что Apache не вмешивается, так как в логах ничего нет - чтоменя понимает, что я ничего не вижу на Wireshark.Как будто телефон просто не пытается сделать запрос.

Ответы [ 2 ]

3 голосов
/ 14 декабря 2010

может быть это кеширование запросов ajax? попробуйте установить cache: false в ваших запросах jquery ajax.

0 голосов
/ 14 декабря 2010

Вы проверили консоль в firebug или отладчике JS? Я столкнулся с проблемой, что jquery не позволяет вам делать вызовы AJAX таким образом из-за проблем безопасности, и возвращает эту ошибку

Access to restricted URI denied" code: "1012

Однако похоже, что некоторые люди пытались обойти это. Прочитайте это, если вы еще не http://usejquery.com/posts/9/the-jquery-cross-domain-ajax-guide

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