使用ajax调用获取json对象,包含3个数组,并将数组传递给javascript

fetch json object containing 3 arrays with ajax call and pass arrays to javascript

本文关键字:数组 javascript 包含 调用 ajax 获取 json 使用 对象 3个      更新时间:2023-09-26

我有一个创建以下输出的页面:

<script>
  var JSONObject = { "groups":['1210103','1210103','1210103','1210405'],
                     "prices":['279,00','399,00','628,00','129,00'],
                     "titles":['','','','']
                    }; 
</script>

此页面由ajax调用调用:

$.ajax({url:plink,success: function(result) { }

我现在需要接收json数组并将它们传递给普通javascript数组。我怎么做呢?

我试过了:

result = jQuery.parseJSON(data);
mygroups = result.groups;
myprices = result.prices;
mylabels = result.titles;

更改您的页面,使其生成JSON:

{"groups":["1210103","1210103","1210103","1210405"],
 "prices":["279,00","399,00","628,00","129,00"],
 "titles":["","","",""]
}

请注意,在JSON中,必须使用",而不是'来引用字符串。

让它返回application/jsonContent-Type头。如果由于某种原因你不能在响应上设置正确的Content-Type头,你可以通过在你的ajax调用中添加dataType: 'json'来强制jQuery将响应作为JSON处理,但最好使用正确的content-Type

然后在ajax调用的success回调中,result已经是具有三个属性(groups, prices, titles)的反序列化对象,这将是您可以使用的JavaScript数组。

实例|来源


你已经在下面的评论中说过,这个页面是一个完整的HTML页面,嵌入了script标签,除了script标签的内容之外,你无法控制它,因为你正在使用的CMS。

强烈建议使用更灵活的CMS。

除非您可以这样做,否则您可以简单地将页面作为文本接收,然后提取JSON。把你的script标签改成这样:

<script>
var JSONObject = /*XXX_JSONSTART_XXX*/{"groups":["1210103","1210103","1210103","1210405"],
 "prices":["279,00","399,00","628,00","129,00"],
 "titles":["","","",""]
}/*XXX_JSONEND_XXX*/;
</script>

注意标记。然后可以提取标记之间的JSON,并对其使用$.parseJSON。例子:

(function($) {
  $.ajax({
    url: "http://jsbin.com/ecolok/1",
    dataType: "text",
    success: function(result) {
      var startMarker = "/*XXX_JSONSTART_XXX*/";
      var endMarker   = "/*XXX_JSONEND_XXX*/";
      var start, end;
      start = result.indexOf(startMarker);
      if (start === -1) {
        display("Start marker missing");
      }
      else {
        start += startMarker.length;
        end = result.indexOf(endMarker, start);
        if (end === -1) {
          display("End marker missing");
        }
        else {
          result = $.parseJSON(result.substring(start, end));
          display("result.groups.length = " + result.groups.length);
          display("result.prices.length = " + result.prices.length);
          display("result.titles.length = " + result.titles.length);
        }
      }
    }
  });
  function display(msg) {
    $("<p>").html(String(msg)).appendTo(document.body);
  }
})(jQuery);

Live Copy | Source