Javascript Phonegap内对RESTful API的Jquery ajax调用

Javascript Phonegap内对RESTful API的Jquery ajax调用,javascript,jquery,android,rest,cordova,Javascript,Jquery,Android,Rest,Cordova,我正在尝试从android仿真器(使用android 2.2)进行RESTful api调用。在登录请求的服务器上,我正在设置response.setHeader(“访问控制允许源代码”、“*”) 在Firefox4和Chrome10中,这段代码可以很好地工作,我相信android浏览器可以从版本中解析这个标题 服务器从未收到请求,并且状态代码为0,我已经读到这可能意味着交叉脚本错误。但是,正如我所说,它在现代浏览器中运行良好 这些是我在LogCat中看到的相关日志 03-29 20:30:46

我正在尝试从android仿真器(使用android 2.2)进行RESTful api调用。在登录请求的服务器上,我正在设置
response.setHeader(“访问控制允许源代码”、“*”)

在Firefox4和Chrome10中,这段代码可以很好地工作,我相信android浏览器可以从版本中解析这个标题

服务器从未收到请求,并且状态代码为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" />

正如您提到的,您正在为登录服务调用RESTful API,我认为您需要将ajax类型指定为POST方法,因为默认情况下它是GET方法。i、 e

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

我认为这就是服务器不返回任何响应的原因


如果这不能解决您的问题,您能否告诉我您是否可以从应用程序成功访问其他web服务(web上的任何内容?

这是由于android emulator无法连接到internet造成的。通过将
-dns服务器X.X.X.X
(其中X.X.X.X是我的dns服务器)添加到eclipse中Android首选项中的“默认仿真器选项”来修复此问题。

您可以输出error.message而不是error吗?@knoguchi console.log(error.message);给我:是的,我把它和本地存储搞混了。您是否在android manifest xml文件中设置了internet访问权限?@knoguchi yea是的-我已经编辑了我的帖子,以包含我的AndroidManifest.xml的权限部分。如果服务器根本没有收到请求,状态代码0可能表示防火墙有问题。你试过把它关掉吗?我会先说Phonegap可能不适合我的需要,但我有几个问题。我正在尝试获取信息(这是有效登录吗?),因此它应该是一个get请求。其次,GET请求实际上在FF4和Chrome10中工作。可能是phonegap需要提供一个插件来访问phones网络功能,以便“正确地”执行此操作。嗯,我实际上制作了phonegap应用程序,它使用ajax发送请求,没有问题。您可能想看看ajax请求是否与不同的服务器(如www.google.com)一起工作(如果您仍然想使用phonegap of Course:)。也许问题在于仿真器。当我记得带USB适配器上班时,我会尝试一部真正的手机。
  <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" />