Ajax调用如何在移动应用程序(PhoneGap)中运行,而不是在PC浏览器中运行?

Nag*_*h M 7 jquery jsonp cordova

Ajax对服务器页面的调用如何在移动应用程序中完美运行(使用PhoneGap).但是,当我从PC浏览器中的普通HTML页面运行相同的Ajax调用时,它无法正常工作.我想这个问题是跨域的.但是,它如何在移动应用程序中运行良好.

使用JSONP它在PC浏览器和移动应用程序(使用PhoneGap)中运行良好.但在移动应用程序中,没有datatype="jsonp"工作正常.

Pau*_*ien 12

来自PhoneGap FAQ:

问:我想为phonegap创建一个应用程序,以通过AJAX访问外部部署的Web服务.如何使用XmlHttpRequest的跨域安全策略解决问题?

答:跨域安全策略不会影响PhoneGap应用程序.由于webkit使用file:// protocol调用html文件,因此安全策略不适用.(在Android中,您可以通过编辑AndroidManifest.xml将android.permission.INTERNET授予您的应用)

  • 浏览器中的跨域策略仍然针对本地文件强制执行.您将*不能*从浏览器发出跨域请求. (2认同)
  • 此外,不同的浏览器对本地文件没有相同的跨域策略另请参见http://stackoverflow.com/questions/3988494/cross-domain-ajax-fails-even-for-a-local-file (2认同)

Jas*_*ean 7

移动应用程序(PhoneGap,Adobe AIR,Titanium,Native等)对桌面浏览器执行的XHR请求没有相同的来源限制.他们可以进行任何他们想要的跨域调用.这就是为什么它在手机上工作正常而不在桌面上.

JSONP可以正常工作,因为它不使用XHR.它使用<script>标记执行跨域请求.因此它绕过了浏览器的同源策略.JSONP只能在远程服务以函数形式返回数据然后立即执行时才能工作.