繁体   English   中英

为什么我的 ajax 请求中的 requestPayload 为空

[英]Why is my requestPayload empty on my ajax request

我们正在尝试从纯ext.js迁移到在控制器中使用ext.js的模型,但前端是纯 html,引导程序。

在我们迁移时,我正在尝试对登录请求进行 ajax。 我有一个 ajax 调用,它返回一个空的requestPayload

loginSubmit : function(param){
        var me = this,
        params = {
            url: 'login/login',
            method: "POST",
            jsonData: Ext.JSON.encode(param.formValues) ,
            success: function (response) {
                var data = Ext.JSON.decode(response.responseText);
                Insights.view.common.util.StorageUtil.setAppData(response.responseText);

                me.getView().destroy();

                Ext.create({
                    xtype: 'mainviewport'
                });
            },
            failure: function (response) {
                var errorMessage = "Network connect timeout error"
                if (response.status == 401 || response.status == 500) {
                    var data = Ext.JSON.decode(response.responseText);
                    errorMessage = data.message;
                }

                if(param.loginButton){
                    var errMsg = form.queryById('login-error-msg');
                    errMsg.setText(errorMessage);
                    errMsg.setVisible(true);
                    param.loginButton && params.loginButton.enable();
                }

            }
        };
        Insights.view.common.util.RequestUtil.request(params, 'false');
    },

我在 Chrome 上进行了调试,但 requestPayload 不存在。

不工作的 html 版本

纯 ext.js 项目在 Chrome 上调试时返回以下内容。

工作 extjs 版本

正如您所注意到的,这有带有用户名和密码的 requestPayload。 同样failure: function (response)返回 response.status=0 我在发送请求的纯 javascript 方式中缺少什么。

编辑,添加 RequestUtil 代码

Ext.define('Insights.view.common.util.RequestUtil', {
    singleton: true,

    config: {
        baseUrl: ''
    },

    request: function (params, component) {
        var me = this,
            headers = {
                'ACCEPT': 'application/json'
            };


        var appData = Insights.view.common.util.StorageUtil.getAppData();
        if (appData) {
            headers.authToken = appData.token;
        } else if (params.authToken) {
            headers.authToken = params.authToken;
        }

        if(params.headers) {
            Ext.Object.merge(headers, params.headers)
        }

        this.loadMask(component);
        Ext.Ajax.request({
            url: this.getBaseUrl() + params.url,
            timeout: 60000,
            headers: headers,
            disableCaching: false,
            method: params.method,
            jsonData: params.jsonData,
            params: params.extraParams,
            binary: !params.binary ? false : params.binary,
            success: function (response, opts) {
                if (params.success) {
                    params.success(response, opts);
                    me.unLoadMask(component);
                }
            },
            failure: function (response, opts) {
                if (params.failure) {
                    params.failure(response, opts);
                }

                if (!Ext.isString(component)) {
                    me.unLoadMask(component);
                    if (params.url == "authenticate" || params.url == "userInfo") {
                        return;
                    }
                    var responseText = response.responseText && Ext.JSON.decode(response.responseText);
                    if (responseText && responseText.status === 'Failure') {
                        Ext.Msg.alert(i18nLabels.warning, responseText.message);
                    } else if (response.status == 401) {
                        me.handleSessionTimeout();
                    } else if (response.status == 404 || response.status == 500) {
                        me.errorHandler(responseText.message);
                    } else if (response.status == 405) {
                    } else {
                        me.errorHandler(i18nLabels.serverNotAvailable);
                    }
                }

            }
        });
    },

我调试并检查过,jsonData 确实有用户名、密码字符串。 这个ajax失败,进入failure段。

第一个屏幕中的 OPTIONS 请求表明存在与CORS相关的问题。 这个问题可以通过启用 CORS来解决。

作者的解决方案(来自评论): open -a Google\\ Chrome --args --disable-web-security --user-data-dir="tmp/tmpChrome

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM