2012-10-08 147 views
2

我正在創建登錄系統Sencha Touch 2。我在提交表單時遇到問題。它沒有從服務器獲取響應數據。下面是我的代碼表單提交不起作用

控制器:

Ext.define("MyMobile.controller.LoginController", { 
extend: "Ext.app.Controller", 
views: ['LoginView'], 

config: { 
    refs: { 
     loginForm: "#loginFormPanel" 
    }, 
    control: { 
     'button[action=login]': { 
      tap: "authenticateUser" 
     } 
    } 
}, 

authenticateUser: function (button) { 

    this.getLoginForm().submit({ 
     url: 'login/authenticate', 
     method: 'POST', 
     success: function (form, result) { 
      debugger; //This block of code is not executing even after JSON response 
      var jsonoutput = Ext.decode(result); // json parsing 
      Ext.MessageBox.alert('Error', "Success"); 

     }, 
     failure: function (form, result) {//This block of code is not executing even after JSON response 
      Ext.MessageBox.alert('Error', "Invalid username/password"); 
     } 

    }); 
} 

}); 

查看

Ext.define("MyMobile.view.LoginView", { 
extend: "Ext.form.FormPanel", 
alias: "widget.mylogin", 
id: 'loginFormPanel', 

config: { 

    margin: '0 auto', 
    name: 'loginform', 
    frame: true, 
    url: 'login/Authenticate', 
    title: 'Login', 
    items: [ 
     { 
     xtype: 'fieldset', 

     itemId: 'LoginFieldset', 
     margin: '10 auto 0 auto ', 

     title: '', 
     items: [ 
       { 
        xtype: 'textfield', 

        label: 'User Name', 
        name: 'my-username', 
        required: true, 

        placeHolder: 'Username' 
       }, 
       { 
        xtype: 'emailfield', 
        label: 'Email', 
        name: 'Email' 
       }, 
       { 
        xtype: 'passwordfield', 

        label: 'Password', 
        name: 'my-password', 
        required: true, 

        placeHolder: 'Password' 
       } 
      ] 
    }, 
    { 
     xtype: 'button', 
     id: 'loginButton', 
     margin: '25 auto 0 auto ', 
     style: '', 
     maxWidth: 200, 
     ui: 'action', 
     width: '', 
     iconCls: 'user', 
     iconMask: true, 
     text: 'Login', 
     action: 'login' 
    } 

    ] 
} 

}); 

App.JS

Ext.application({ 

name: "MyMobile", 
appFolder: "myapp", 
controllers: ["LoginController"], 
views: ['LoginView'], 

launch: function() { 

    var loginPanel= Ext.create('Ext.Panel', { 
     layout: 'fit', 

     items: [ 
      { 
       xtype: 'mylogin' 
      } 
     ] 
    }); 


    Ext.Viewport.add(loginPanel); 
} 

}); 

可不可以有一個人湊ld弄清楚應該是什麼問題?

下面是我從服務器獲得的JSON響應。

{ 「用戶名」: 「穆拉利」, 「isAdmin」:真實的, 「isAuthenticated」:真正}

即使得到一個JSON和200確定結果後,我的代碼提交表單功能進入衰竭回調。在失敗回調函數失敗:函數(形式,結果)我得到的結果參數爲我的JSON。但爲什麼它失敗了?

+0

「下面是來自我的服務器的JSON響應。「,所以你得到了一個結果,或者這是你期望得到的結果嗎? – Rob

+0

我得到JSON響應和200好結果。但是表單提交的成功或失敗回調沒有執行 –

+1

嗯,如果你使用'callback:function(){console.log('cb'); }'? – Rob

回答

2

讓你的服務器返回JSON響應象下面這樣:

如果成功:

{ 
    "success":true, 
    "UserName":"Murali", 
    "isAdmin":true, 
    "isAuthenticated":true 
} 

如果失敗:

{ 
    "success":false 
} 

閱讀:http://docs.sencha.com/touch/2-0/#!/api/Ext.form.Panel-method-submit

+0

Hi Sreenath。真棒!它像魅力一樣工作!謝謝。是否有可能將我的cookie值作爲響應頭的一部分發送並將其用於後續請求?像這樣,我們在正常的網絡上進行會話管理 –

+1

yes ofcourse它的可能性,請閱讀:http://stackoverflow.com/a/5045117/1600692或http://stackoverflow.com/questions/8733025/setting -persistent-cookies-with-javascript,你可以在你的'success'方法中做到這一點。 –

+0

感謝您的參考。我正在通過http://stackoverflow.com/questions/12384150/authentication-on-sencha-touch-and-remote-server?lq=1。同樣也會讓人感到困惑,比如如何將cookie存儲在本地存儲中,並在每個請求中將其作爲頭參數進行檢索和發送。有沒有例子? –