【问题标题】:$.ajax request fails for first call on page load [duplicate]$.ajax 请求在页面加载时第一次调用失败[重复]
【发布时间】: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 truereturn false没有意义,没有任何使用返回值。
  • 您设置了 contentType: 'application/json',但您没有带有 JSON 数据的 data: 选项。
  • @Barmar 如果你能帮助我将你上面报告的点作为我面临的问题的原因,那就太好了。因为无论如何我的代码在第二次或第三次刷新时都可以工作
  • 你好像不明白AJAX是异步的。在调用 fetchFromSession() 之前,您无需等待第一个 AJAX 调用完成。
  • 这很有道理.. 我有那种氛围.. 但问题是我如何控制完整的脚本文件加载以等待 ajax 调用完成?因为 fetchfromsession 在下一个依赖文件中被调用。

标签: jquery node.js ajax


【解决方案1】:

请尝试使用POST 方法

喜欢

$.ajax({ type: "POST", async: true, cache: false,

【讨论】:

  • 使用 POST 的任何具体原因?顺便说一句,我正在尝试获取数据,因此它实际上是一个获取请求
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-09
  • 2021-05-20
  • 1970-01-01
相关资源
最近更新 更多