【发布时间】:2018-04-19 14:06:28
【问题描述】:
我有代码 sn-p,我通过$.ajax 从后端节点服务器中提取所有配置。但是当我第一次点击我的页面时,我没有得到响应,当我检查节点服务器上的日志时,我确实看到请求的状态为 200 Ok。但是我刷新页面两次或三次我得到了正确的响应。
下面是我的代码:
var appConfig = getConfig();
function setAppConfig(){
var url = env.NEW_SERVER_URL + '/api/client/getConfig/carrier/';
$.ajax({
type: 'GET',
contentType: "application/json",
url: url,
success: function (response) {
// console.log(response);
var configData = JSON.stringify(response);
sessionStorage.setItem('config', configData);
return true;
},
error: function (error) {
console.log("some error in connection with server");
return false;
}
});
}
function getConfig(){
var appConfig = "";
// console.log(fetchFromSession('config'));
if(fetchFromSession('config') !== null){
appConfig = JSON.parse(fetchFromSession('config'));
}else{
if(setAppConfig()){
appConfig = JSON.parse(fetchFromSession('config'));
}else{
console.log('Something went wrong in pullling the configs');
}
}
return appConfig;
}
响应获取请求的节点服务器代码:
exports.config = ((req, res,next) => {
let carrier = req.params.carrier;
logger.info("getConfig started", {carrier: carrier});
if(carrier){
var msg = require(path.join('./../../../config/',carrier,'/config.json'));
logger.info("Response for getScripts", {carrier: carrier, response: msg});
res.send(msg);
}
})
此脚本首先在页面上加载,所有依赖的脚本都标记为defer以等待它加载
问题:
- 我的代码有什么问题?
- 为什么第一次不生效,之后刷新页面就生效了?
- 我需要做什么才能在首次加载时获得成功响应?
【问题讨论】:
-
在回调函数中使用
return true和return false没有意义,没有任何使用返回值。 -
您设置了
contentType: 'application/json',但您没有带有 JSON 数据的data:选项。 -
@Barmar 如果你能帮助我将你上面报告的点作为我面临的问题的原因,那就太好了。因为无论如何我的代码在第二次或第三次刷新时都可以工作
-
你好像不明白AJAX是异步的。在调用
fetchFromSession()之前,您无需等待第一个 AJAX 调用完成。 -
这很有道理.. 我有那种氛围.. 但问题是我如何控制完整的脚本文件加载以等待 ajax 调用完成?因为 fetchfromsession 在下一个依赖文件中被调用。