javascript - 为什么在我的 ajax 请求中我的 requestPayload 是空的

标签 javascript ajax extjs

我们正在尝试从纯 ext.js 迁移到在 Controller 中使用 ext.js 的模型,但前端是纯 html,bootstrap。

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

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 不存在。

not working html version

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

working extjs version

如您所见,它具有带有用户名和密码的 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相关问题。这个问题可以通过enabling CORS来解决.

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

关于javascript - 为什么在我的 ajax 请求中我的 requestPayload 是空的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54683182/

相关文章:

javascript - 带有行单击事件的复选框标题在 extjs 6.5.1 中无法正常工作

javascript - Sencha Touch 商店过滤器按功能

css - Ext.Net 工具栏按钮背景颜色(在 IE 中不正确)

javascript - 为什么 facebook 将 id ="pageTitle"添加到他们每个页面的页面标题中?

javascript - CSS - 定位滚动 div

php - 使用ajax验证时禁用提交按钮

javascript - 在 flask 应用程序中,如何根据 View 中发现的条件在 ajax 发布期间重定向到新页面?

javascript - 使用json获取php调用页面的返回值

javascript - 在 meteor 应用程序中将 base64 转换为 png

javascript - 如何通过javascript将unix纪元转换为[年,月,日]