Phonegap跨域AJAX POST请求在Android上不起作用
跨域AJAX POST请求在web浏览器(包括移动电话上的浏览器)上运行良好,但不适用于使用Phonegap跨域AJAX POST请求在Android上不起作用,android,jquery,ajax,cordova,cross-domain,Android,Jquery,Ajax,Cordova,Cross Domain,跨域AJAX POST请求在web浏览器(包括移动电话上的浏览器)上运行良好,但不适用于使用Phonegap 我创建了一个登录表单,用户必须输入他们的登录凭据,然后由heroku上托管的服务器验证,如果输入了有效凭据,则返回json{“success”:true} 我的Ajax脚本: $.ajax({ type: "POST", url: "http://domain.com/public/auth/app-login", contentType: "application/x
Phonegap
我创建了一个登录表单,用户必须输入他们的登录凭据,然后由heroku上托管的服务器验证,如果输入了有效凭据,则返回json{“success”:true}
我的Ajax脚本:
$.ajax({
type: "POST",
url: "http://domain.com/public/auth/app-login",
contentType: "application/x-www-form-urlencoded; charset=utf-8",
dataType: "json",
data: {identity: <username from form>, password: <password from form>},
crossDomain: true,
cache: false,
success: function(data) {
obj = JSON.parse(data);
if (obj && obj.success === true) {
window.location.href = 'home.html';
}
},
error: function(e) {
alert('Error: ' + e.message);
}
});
$.ajax({
类型:“POST”,
url:“http://domain.com/public/auth/app-login",
contentType:“application/x-www-form-urlencoded;charset=utf-8”,
数据类型:“json”,
数据:{标识:,密码:},
跨域:是的,
cache:false,
成功:功能(数据){
obj=JSON.parse(数据);
if(obj&&obj.success==true){
window.location.href='home.html';
}
},
错误:函数(e){
警报(“错误:”+e.message);
}
});
解决此问题所采取的步骤:
$.ajax({
type: "POST",
url: "http://domain.com/public/auth/app-login",
contentType: "application/x-www-form-urlencoded; charset=utf-8",
dataType: "json",
data: {identity: <username from form>, password: <password from form>},
crossDomain: true,
cache: false,
success: function(data) {
obj = JSON.parse(data);
if (obj && obj.success === true) {
window.location.href = 'home.html';
}
},
error: function(e) {
alert('Error: ' + e.message);
}
});
- -config.xml
- 告诉jQuery允许跨域
$.support.cors=true;
或
jQuery.support.cors=true;
- 禁用缓存
cache:false
非常感谢您的帮助。好的。如果index.html是本地的,那么您可以在任何主机上调用ajax,而不需要在客户端或服务器上启用CORS。您删除:
$.support.cors = true; OR jQuery.support.cors = true;
以及:
它是多余的,只能使用:
<access origin="*" />
您需要检查并加载AndroidManifest.xml:
<uses-permission android:name="android.permission.INTERNET" />
如果应用程序需要,请添加更多权限。最后,在$(document.ready()中调用ajax:
$.ajax({
类型:“POST”,
url:“http://domain.com/public/auth/app-login",
数据类型:“json”,
数据:{标识:,密码:},
成功:功能(数据){
obj=JSON.parse(数据);
if(obj&&obj.success==true){
window.location.href='home.html';
}
},
错误:函数(e){
警报(“错误:”+e.message);
}
});
使用
JSON.stringify(数据:{identity:,密码:})
而不是
数据:{标识:,密码:}
当我像这样更改代码时,收到了成功消息。如果您希望解决此问题,那么您可能希望确保插件正确地包含在构建过程中
RESOURCE: \app\config.xml
<widget>
.... [lots of stuff] ....
<gap:plugin name="com.indigoway.cordova.whitelist.whitelistplugin" />
<access origin="http://*" />
....
</widget>
有时在您的域中会出现问题。在我的例子中,我通过在.htaccess文件中添加以下代码来解决它
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
</IfModule>
标题集访问控制允许原点“*”
请阅读我写的内容。服务器没有问题,因为它在web浏览器上工作得非常好,在移动电话的浏览器上也是如此。Ok。我明白。您是否从本地应用程序或远程服务器加载index.html(您的应用程序)。若您从远程服务器加载,那个么它也会有上述相同的问题。您是否可以发布服务器的详细错误:访问控制允许来源不允许或…当我在android上以本机方式运行应用程序时,在输入正确的登录凭据后,它会从我的ajax错误命令中抛出一个错误:undefined
。我不知道这是为什么。对不起。您开发的应用程序类型(Phonegap android或android native)。如果(Phonegap)您的应用程序从本地(www文件夹内)或远程服务器(super.loadUrl(“http://...")). 你能发布你服务器的代码吗?我正在开发一个phonegap应用程序,我用eclipse构建并在android手机上运行它。我有一个assets
目录,它有www
,我正在调用index.html
,因此它是本地的。嗨,你能解决这个问题吗?你能分享解决方案吗?是的,我解决了。尝试以下方法:1。域白名单(),2。使用XMLHttpRequest与服务器通信-请参阅添加
帮助我解决了问题。
RESOURCE: \app\config.xml
<widget>
.... [lots of stuff] ....
<gap:plugin name="com.indigoway.cordova.whitelist.whitelistplugin" />
<access origin="http://*" />
....
</widget>
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">
RESOURCE: \app\config.xml
<widget>
...
<feature name="http://api.phonegap.com/1.0/network"/>
...
</widget>
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
</IfModule>