JQuery ajax вызов в Phonegap для RESTful API

Я пытаюсь сделать RESTful api-вызов от эмулятора android (используя Android 2.2). На моем сервере для запроса на вход я устанавливаю response.setHeader("Access-Control-Allow-Origin", "*"); заголовка 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 

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

Изменить: разрешения 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" /> 

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

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

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

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

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