【问题标题】:How to use getjson() for multiple URLs如何对多个 URL 使用 getjson()
【发布时间】:2017-10-01 21:00:53
【问题描述】:

我正在尝试检索一些 JSON 文件。不确定哪个 URL 会起作用,因此我正在寻找一种方法来尝试所有 URL,如果一个失败,它会尝试另一个。

网址如:

www.domain.com/a.json
www.domain.com/b.json
www.domain.com/c.json

var url = "www.domain.com";
var file1 = "/a.json";
var file2 = "/b.json";
var file3 = "/c.json";

$.getJSON( url + file1, function( json ) {
  console.log( "JSON Data: " + json.users[ 3 ].name );
 });

每个 json 文件的结构也不一样,所以根据文件我必须有不同的方式来访问它。假设对于文件 a.json,我将通过 json.users[3].name 访问数据,但在文件 b.json 中,json.sources.users[3].name 将访问相同的数据。

那么我怎样才能做出这样的方法来尝试新的 url 失败时呢? 通过失败,我的意思是它可能不是现有文件 (404) 或相同的腹股沟策略错误。

提前致谢。

【问题讨论】:

    标签: javascript json getjson jqxhr


    【解决方案1】:

    您可以将调用链接在一起,因此如果一个调用失败,它会使用 $.getJSON 上的 jquery fail 方法转到下一个调用。像这样的:

    $.getJSON( url + file1, function( json ) {
        //do something with file1
    }).fail(function () {
        $.getJSON( url + file2, function( json ) {
            //do something with file2
        }).fail(function () {
            $.getJSON( url + file3, function( json ) {
                //do something with file3
            })
        });
    });
    

    文档链接:http://api.jquery.com/jquery.getjson/#jqxhr-object

    【讨论】:

      【解决方案2】:

      使用jQuery的Promise.all实现:$.when

      var url = "www.domain.com";
      var urls = ["/a.json", "/b.json", "/c.json"];
      var requests = urls.map(function(path) {
         return $.getJSON(url + path);
      });
      
      $.when.apply($, requests).then(function(a_resp, b_resp, c_resp) {
        console.log( "JSON Data: ", a_resp, b_resp, c_resp );
      });
      

      这将允许您等到所有请求都完成并让您访问他们的所有响应。

      【讨论】:

        猜你喜欢
        • 2013-12-07
        • 2019-01-28
        • 1970-01-01
        • 2011-11-20
        • 1970-01-01
        • 2020-12-04
        • 2018-04-04
        • 2013-12-22
        • 1970-01-01
        相关资源
        最近更新 更多