跨域 AJAX POST 请求在 Web 浏览器(包括手机浏览器)上运行良好,但不适用于使用 Phonegap
构建的 native 应用程序
我创建了一个登录表单,用户必须输入他们的登录凭据,然后由托管在 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);
}
});
为解决此问题所采取的步骤:
- Domain whitelisting - 配置.xml
<access origin="http://domain.com/public/auth/app-login" />
<access origin="*" />
- 告诉 jQuery 允许跨域
$.support.cors = true;
或者
jQuery.support.cors = true;
- 禁用缓存
cache: false
感谢任何帮助。
最佳答案
好的。如果 index.html 在本地,那么您可以在任何主机上调用 ajax,而不需要在客户端或服务器中启用 CORS。您删除:
$.support.cors = true; OR jQuery.support.cors = true;
和:
<access origin="http://domain.com/public/auth/app-login" />
多余,只用:
<access origin="*" />
需要检查并在AndroidManifest.xml中添加:
<uses-permission android:name="android.permission.INTERNET" />
如果您的应用需要,请添加更多权限。最后,在 $(document).ready() 中调用 ajax:
$.ajax({
type: "POST",
url: "http://domain.com/public/auth/app-login",
dataType: "json",
data: {identity: <username from form>, password: <password from form>},
success: function(data) {
obj = JSON.parse(data);
if (obj && obj.success === true) {
window.location.href = 'home.html';
}
},
error: function(e) {
alert('Error: ' + e.message);
}
});
关于android - Phonegap 跨域 AJAX POST 请求不适用于 Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19003025/