0

私は 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.

上記のエラー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

Ajax の代わりにJsonPを使用する必要があります。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メソッドを使用することはできませんPOSTcallbackサーバーは、関数の実行を続行するために、リクエストで送信されたものを返す必要もありcallbackます。ここで、私の ans に関するちょっとした情報を見つけることができます。

また、CORS、つまり関連情報については、ここでCross-Origin Resource Sharing別の ans を参照してください

EDIT必要なクラスを追加する必要があります。requires:['Ext.data.proxy.JsonP']あなたのファイルのように。JSONPで未定義エラーを参照

于 2013-03-11T06:52:10.267 に答える