【问题标题】:what alternative for ajax async deprecated feature?ajax async 已弃用功能的替代方法是什么?
【发布时间】:2022-01-24 00:19:27
【问题描述】:

使用以下 ajax 函数调用以 JSON 格式返回数据的 API 端点不会将 results 的值从 undefined 更改为 json['info'] 中的值,但将 async 更改为 false 时会发生这种情况。

检查包含此功能的网页,显示此功能已被弃用,并且没有其他建议。

如何在不编写更多代码来解析服务器返回的数据的情况下读取 json 数据?

function update_info()
{
    var results ;
    $.ajax({
        type: 'GET',
        url : "ip:port/api/info",
        async:true,
        success: function(data) {
            results = data['info'];
            //console.log(results);
        }
    });
    console.log(results);
    return results;
}   

This 似乎不符合我的目标,因为数据是从 API 返回的,而不是网页源代码返回到 ajax。

【问题讨论】:

  • 我不这么认为,因为该函数没有返回所需的信息,而且这仍然不能解决不使用async: true如果我错了请纠正我
  • 你错了。您要解决的问题是如何将异步操作视为同步操作。这是解决问题的错误方法。拥抱操作的异步特性。在显示的代码中,特定情况是您在函数内进行 AJAX 调用,并希望从该函数返回该调用的结果。链接副本中的问题和答案使用该确切场景作为示例。异步操作没有“解决方法”,解决方案是保持它们异步。

标签: ajax


【解决方案1】:

正如 David 所说,您应该使用异步调用

       function update_info()
       {
            
            return $.ajax({
                type: 'GET',
                url : "ip:port/api/info",
                async:true,
                success: function(data) { data;}
            });}
       async function f1() {
            var results = await update_info();
            console.log(results['info']); 
       }
       f1();

这将在完成后返回 ajax 调用,然后您可以从中获取 info 数据

【讨论】:

    【解决方案2】:

    您可以同时使用这两种方法,也可以使用.thenawait

    我附上了以下示例的源代码。

    ajaxRequest("https://httpbin.org/ip").then(result => {
      console.log('Your PC Address is:' + result.origin);
    });
    
    let myPcRes = await ajaxRequest("https://httpbin.org/ip");
    console.log('Your PC Address is from the await approach: ' + myPcRes.origin);
    

    您需要将results$.ajax 进行比较

    并返回成功方法的响应。

    希望对您有所帮助, https://jsfiddle.net/tru5k6qz/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      相关资源
      最近更新 更多