Icce___ 2019-06-22 13:53 采纳率: 66.7%
浏览 598
已采纳

EXTJS中ajax请求回调函数中如何跳转页面?

初学extjs,网上找了个登录功能的案例,我的理解是填写表单点击按钮就直接给全局变量(是否登录)赋值,然后将当前登录的窗口删除,重新创建主页面的对象。

    onLoginClick: function(){
        // Set the localStorage value to true
        localStorage.setItem("isLogin", true);
        // Remove Login Window
        this.getView().destroy();
        // Add the main view to the viewport
        Ext.create({
            xtype: 'app-main'
        });
    },

这是没有与后端结合的,我就给他加了个向后端发送请求,然后实现账号密码正确就跳转页面,错误就弹窗提示。

    loginChange: function(){
        // Set the localStorage value to true
        localStorage.setItem("isLogin", true);
        // Remove Login Window
        this.getView().destroy();
        // Add the main view to the viewport
        Ext.create({
            xtype: 'app-main'
        });
    },
    onLoginClick: function(){
        Ext.Ajax.request({
            url:"/openmaint/services/json/session/create",
            method:"POST",
            params: {
                username: Ext.getCmp('username').getValue(),
                password: Ext.getCmp('password').getValue()
             },
            success: function(response, options){
                var respText = Ext.util.JSON.decode(response.responseText);
                if(respText.success){
                    this.loginChange();
                    console.log(respText.response.group);
                }else{
                    Ext.Msg.alert("提示","账号或密码错误!")
                }
            }
        });

但是这样写的话,会在this.loginChange();这一行报错,Uncaught TypeError: this.loginChange is not a function。
如果调换这行代码的位置,放到request方法外面,是不会报错的。所以是不是在request方法里这个this对象并不是当前页面这个对象?这种情况下该如何修改才能实现我想要的效果?location.href这个方法我试过,可以行得通,但是这样的话就得有两个页面(html文件)。不太希望使用这种方法。请大家帮忙解答下,十分感谢!!!

  • 写回答

1条回答 默认 最新

  • Icce___ 2019-06-22 18:06
    关注

    问题解决了,跟ajax请求无关,在其他地方也碰到了同样的问题。主要是js在嵌套的方法里,this对象会被覆盖,所以导致找不到方法。只要在外一层的方法里面先把this赋值给另一个不会重名的变量就可以了。

    ```onLoginClick: function(){
    var that=this;
    Ext.Ajax.request({
    url:"/openmaint/services/json/session/create",
    method:"POST",
    params: {
    username: Ext.getCmp('username').getValue(),
    password: Ext.getCmp('password').getValue()
    },
    success: function(response, options){
    var respText = Ext.util.JSON.decode(response.responseText);
    if(respText.success){
    that.loginChange();
    console.log(respText.response.group);
    }else{
    Ext.Msg.alert("提示","账号或密码错误!")
    }
    }
    });

    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥30 基于信创PC发布的QT应用如何跨用户启动后输入中文
  • ¥20 非root手机,如何精准控制手机流量消耗的大小,如20M
  • ¥15 远程安装一下vasp
  • ¥15 自己做的代码上传图片时,报错
  • ¥15 Lingo线性规划模型怎么搭建
  • ¥15 关于#python#的问题,请各位专家解答!区间型正向化
  • ¥15 unity从3D升级到urp管线,打包ab包后,材质全部变紫色
  • ¥50 comsol温度场仿真无法模拟微米级激光光斑
  • ¥15 上传图片时提交的存储类型
  • ¥15 VB.NET如何绘制倾斜的椭圆