Ajax请求在phonegap / local jquery或sencha上的远程服务器

时间:2012-01-11 13:32:15

标签: jquery cordova extjs

Mobile Device(file://..)                      Server

index.html                     <--JSON---   post.php
main.js
sencha_.js or Jquery_.js

情况如上所述, 所有文件(js,html)都在PhoneGap的移动设备上。(file://.../ www / index.html ...) 它将由WebView显示。

和main.js将调用$ .ajax()或Ext.Ajax.request()来从服务器接收json数据。 (无论POST / GET)

有可能吗?是否存在跨域问题?

3 个答案:

答案 0 :(得分:1)

是的,很有可能。由于您的PhoneGap应用程序是从file://协议运行的,因此相同的源策略不适用,即没有跨域问题。

答案 1 :(得分:1)

Phonegap允许向任何服务器发出请求,您不需要使用任何hacky解决方案,它只是有效,只要您在AndroidManifest.xml中有以下行

<uses-permission android:name="android.permission.INTERNET" />   

答案 2 :(得分:0)

是的,你可以但不能使用原生的AJAX方法。

进行跨浏览器连接的一种方法是制作script标记并使用回调方法解析所有参数:GET only

var url = "http://myPage.com/service.php?parem1=abc&parem2=def&callback=MY_CALLBACK";

window.MY_CALLBACK = function( response ) {
    // Here response have all your data.
}

var script = document.createElement("script");
script.type = "text/javascript";
script.src = url;
document.getElementsByTagName("head")[0].appendChild(script);

<强> http://myPage.com/service.php

<?
    Doing a lot of server site code...

    echo $_GET['callback'] . "(" . $dataToPass . ");";
?>

$_GET["callback"] MY_CALLBACK是我们在全球范围内的javascript方法。

希望你能得到这个想法。

如果您使用的是框架,我认为几乎所有人都有一种方法可以做到这一点。

<强>的jQuery

var url = "http://myPage.com/service.php?parem1=abc&parem2=def";
$.ajax({
    "url": url,
    "dataType": "jsonp",
    "success": function(response) {
        // Here response have all your data.
    }
});

但你没有错误处理程序:(

您使用插件jQuery.jsonp来获取错误处理程序:来自:http://code.google.com/p/jquery-jsonp/wiki/TipsAndTricks

$.jsonp({
  "url": "http://gdata.youtube.com/feeds/api/users/"+userId+"?callback=?",
  "data": {
      "alt": "json-in-script"
  },
  "success": function(userProfile) {
      // handle user profile here 
  },
  "error": function(d,msg) {
      alert("Could not find user "+userId);
  }
});