0

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

<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;
4

1 回答 1

2

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

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

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

让它返回Content-Type一个application/json. 如果由于某种原因您无法在响应上设置正确的标头,您可以通过添加到您的调用Content-Type来强制 jQuery 将响应视为 JSON ,但最好使用正确的.dataType: 'json'ajaxcontent-Type

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

实例| 来源


您在下面的评论中说过,该页面是一个带有嵌入script标签的完整 HTML 页面,除了标签的内容之外,您无法控制它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);

实时复制| 来源

于 2013-02-27T09:39:22.427 回答