Ajax-вызов Jquery в PhoneGap для RESTful API - PullRequest
4 голосов
/ 30 марта 2011

Я пытаюсь сделать RESTful API-вызов из эмулятора Android (с помощью Android 2.2). На моем сервере для запроса входа в систему я устанавливаю заголовок cors response.setHeader("Access-Control-Allow-Origin", "*");

Этот точный код отлично работает с Firefox 4 и Chrome 10, и я был уверен, что браузер Android разрешает этот заголовок с версии 2.1 до .

usr = $("#email").val();
pwd = $("#password").val();

$.ajax({
    url: "http://myremoteserver/login",
    data: {"username": escape(usr), "password": escape(pwd)},
    dataType: "json",
    headers: {"Accept": "application/json"},
    success: function(response) {
      console.log("Success: " + response);
      if (response.result == "success") {
        //doStuff
      }
      else {
        console.log("Success Error: " + response);
        $("#error").html(response);
      }
    },
    error: function(request, status, error) {
      console.log("Error status " + status);
      console.log("Error request status text: " + request.statusText);
      console.log("Error request status: " + request.status);
      console.log("Error request response text: " + request.responseText);
      console.log("Error response header: " + request.getAllResponseHeaders());
      $("#error").html(status);
    }

});

Сервер никогда не получает запрос, а код состояния 0, который я прочитал, может означать ошибку кросс-скриптинга. Но, как я уже сказал, он отлично работает в современных браузерах.

Это соответствующие журналы, которые я вижу в LogCat

03-29 20:30:46.935: DEBUG/PhoneGapLog(277): file:///android_asset/www/index.html: Line 36 : Error status error
03-29 20:30:46.935: INFO/Web Console(277): Error status error at file:///android_asset/www/index.html:36
03-29 20:30:46.954: DEBUG/PhoneGapLog(277): file:///android_asset/www/index.html: Line 37 : Error request status text: error
03-29 20:30:46.954: INFO/Web Console(277): Error request status text: error at file:///android_asset/www/index.html:37
03-29 20:30:46.985: DEBUG/PhoneGapLog(277): file:///android_asset/www/index.html: Line 38 : Error request status: 0
03-29 20:30:46.985: INFO/Web Console(277): Error request status: 0 at file:///android_asset/www/index.html:38
03-29 20:30:47.003: DEBUG/PhoneGapLog(277): file:///android_asset/www/index.html: Line 39 : Error request response text: 
03-29 20:30:47.003: INFO/Web Console(277): Error request response text:  at file:///android_asset/www/index.html:39
03-29 20:30:47.034: DEBUG/PhoneGapLog(277): file:///android_asset/www/index.html: Line 40 : Error response header: 
03-29 20:30:47.034: INFO/Web Console(277): Error response header:  at file:///android_asset/www/index.html:40
03-29 20:33:38.704: DEBUG/SntpClient(65): request time failed: java.net.SocketException: Address family not supported by protocol

Как вы можете видеть, там не так уж много ... больно пытаться что-то отлаживать.

Edit: Разрешения AndroidManifest.xml

  <uses-permission android:name="android.permission.CAMERA" />
  <uses-permission android:name="android.permission.VIBRATE" />
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
  <uses-permission android:name="android.permission.READ_PHONE_STATE" />
  <uses-permission android:name="android.permission.INTERNET" />
  <uses-permission android:name="android.permission.RECEIVE_SMS" />
  <uses-permission android:name="android.permission.RECORD_AUDIO" />
  <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
  <uses-permission android:name="android.permission.READ_CONTACTS" />
  <uses-permission android:name="android.permission.WRITE_CONTACTS" />
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

Ответы [ 2 ]

1 голос
/ 04 апреля 2011

Это было вызвано тем, что эмулятор Android не смог подключиться к Интернету.Это было исправлено добавлением -dns-server X.X.X.X (где XXXX - мой DNS-сервер) к «Параметры эмулятора по умолчанию» в настройках Android в eclipse.

0 голосов
/ 01 апреля 2011

Как вы упомянули, вы вызываете RESTful API для службы входа, я думаю, вам нужно указать тип ajax, который будет методом POST, потому что это метод GET по умолчанию.то есть

$. ajax ({type: 'POST', ...});

Я думаю, именно поэтому сервер не возвращает никакого ответа.

Еслиэто не решает вашу проблему, не могли бы вы сказать мне, если вы можете успешно получить доступ к другим веб-службам (что-нибудь в Интернете) из приложения?

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