Javascript 访问控制允许移动web应用出现源问题
我正在使用sencha touch 2.1开发移动web应用程序。目前我正在做一个登录系统。为此,我将从本地机器向远程服务器发送ajax请求,其中包含用户名和密码。但我一直在犯这个错误Javascript 访问控制允许移动web应用出现源问题,javascript,ajax,cordova,sencha-touch,sencha-touch-2,Javascript,Ajax,Cordova,Sencha Touch,Sencha Touch 2,我正在使用sencha touch 2.1开发移动web应用程序。目前我正在做一个登录系统。为此,我将从本地机器向远程服务器发送ajax请求,其中包含用户名和密码。但我一直在犯这个错误 XMLHttpRequest cannot load http://something.com/login.php?_dc=1362983327250. Origin http://dev.vclouds.com is not allowed by Access-Control-Allow-Origin. 在上
XMLHttpRequest cannot load http://something.com/login.php?_dc=1362983327250. Origin http://dev.vclouds.com is not allowed by Access-Control-Allow-Origin.
在上述错误中<代码>http://dev.vclouds.com是我的localhost
。我在apache配置中这样设置它
下面是我的ajax请求代码
Ext.Ajax.request({
url: 'http://something.com/beta/webservice/login.php',
method: 'post',
params: {
user_name: username,
user_password: password
},
success: function (response) {
var loginResponse = Ext.JSON.decode(response.responseText);
console.log(loginResponse);
if(loginResponse.success === "true") {
me.sessionToken = loginResponse.sessionToken;
me.signInSuccess();
} else {
me.signInFailure(loginResponse.message);
}
},
failure: function (response) {
me.sessionToken = null;
me.signInFailure('Login failed');
},
callback: function (opts, success, response) {
console.log('callback');
console.log(opts);
console.log(success);
console.log(response);
}
});
我怎样才能解决这个问题
更新
我还尝试了JsonP,如下所示
Ext.data.JsonP.request({ //<-- line 35
url: 'http://something.com/beta/webservice/login.php',
callbackKey: 'callback',
//method: 'post',
params: {
user_name: username,
user_password: password
},
callback: function (opts, success, response) {
console.log('callback');
console.log(opts);
console.log(success);
console.log(response);
}
});
您需要使用而不是Ajax。只有当您在同一个域上(即发出的请求和请求的资源应该在同一个域上)时,才能使用Ajax。在这种情况下,您有不同的域,因此需要使用JsonP
请求
你使用JsonP的方式是
Ext.data.JsonP.request({
url: 'http://something.com/beta/webservice/login.php',
callbackKey: 'callback',
params: {
user_name: username,
user_password: password
},
callback:function(result,response){
console.log(response);
}
});
这里考虑的一个重要问题是,用<代码> JsonP <代码>数据将只通过<代码>获取< >代码>方法发送。您不能使用
POST
方法。服务器还需要返回在请求中发送的回调
,以便继续执行回调
函数。你可以在我的ans上找到一些信息
此外,对于CORS ie跨来源资源共享
相关信息,请参考我的另一个ans
编辑您需要添加所需的类。like
需要:[Ext.data.proxy.JsonP']
在您的文件中。参考使用JSON-p的是Ajax…还有很多替代方案。请查看我的更新。我已经使用了JsonP,但它给了我另一个错误。如果我们无法控制服务器配置,我想知道如何制作CORS。对不起,您能详细说明一下您的评论吗?@x4ph4r您需要为此添加正确的require
。请参考此链接,该链接没有回答我的问题。该链接确实回答了此问题。它是否也说明了sencha touch应用程序?使用sencha touch可能会为您提供一些附加选项,但不会阻止任何标准选项工作。它不需要说“sencha touch”,就像高速公路不需要列出每一种能够行驶的车型一样。@quentin会说它可能无法解决您的问题有问题的帖子会告诉您解决问题的方式,以及您可能无法解决问题的方式。您试图做的事情需要服务器(远程服务器和您的服务器)之间的信任,如果您无法建立这种信任,那么您认为它对您没有帮助是正确的,因为它专门用于在无法建立traust时阻止XSS
Ext.data.JsonP.request({
url: 'http://something.com/beta/webservice/login.php',
callbackKey: 'callback',
params: {
user_name: username,
user_password: password
},
callback:function(result,response){
console.log(response);
}
});