0

我正在使用 sencha touch 2.1 开发移动网络应用程序。目前我正在制作一个登录系统。为此,我正在从本地计算机向远程服务器发送 ajax 请求,其中包含用户名和密码。但我不断收到这个错误

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);
        }
    });

但我收到了这个错误

Uncaught TypeError: Cannot call method 'request' of undefined             Login.js:35
4

1 回答 1

0

您需要使用JsonP而不是 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数据将GET仅通过方法发送。你不能用POST方法。服务器还需要返回callback正在发送的请求,以便继续执行callback功能。你可以在这里找到关于我的 ans 的一些信息。

同样对于CORS,即Cross-Origin Resource Sharing相关信息,请参阅我的另一个ans here

编辑您需要添加所需的类。就像requires:['Ext.data.proxy.JsonP']在你的文件中一样。使用 JSONP引用未定义的错误

于 2013-03-11T06:52:10.267 回答