我们正在尝试从纯 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 不存在。
纯 ext.js 项目在 Chrome 上调试时返回以下内容。
如您所见,它具有带有用户名和密码的 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/