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)
有可能吗?是否存在跨域问题?
答案 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);
}
});