【问题标题】:Problem with jquery retrieving xml from aspjquery从asp中检索xml的问题
【发布时间】:2011-11-22 00:31:44
【问题描述】:

我尝试使用 jquery 根据 read xml by jquery 获取 asp 生成的 xml 文件,但我得到 status = parsererror err = TypeError: data is null。在浏览器中输入 xml 文件会生成一个非常好的 xml 文件。我希望我不必做 wget...

xmlhttp = "http://10.1.10.154:1014/dtsearch_2.asp?cmd=pdfhits&DocId=44&Index=C%3a%5cstream%5cSupport%5cIDX%5fESTATE&HitCount=4&hits=185+1ac+1d5+1ff+&hc=323&req=knife"

$.ajax({
  url: xmlhttp,
  method: "POST",
  dataType: "xml",
  success: function(data) {
      var xdoc = $(data);    // Note that jQuery has already done the parsing for us
      alert("Getting tutorials");
      var tutorials = xdoc.find("loc");
      alert("Found: " + tutorials.length);
      tutorials.each(function() {
          alert("Tutoral author: " + $(this).attr("pg"));
      });
  },
  error: function(jxhr, status, err) {
      alert("Ajax error: status = " + status + ", err = " + err);
  }
});

我使用本地 IP 地址和端口 1014,但我不明白为什么这会很重要...

谢谢, 尼克

【问题讨论】:

    标签: jquery xml ajax asp-classic


    【解决方案1】:

    取出var xdoc = $(data),直接引用data即可。

    $.ajax({
      url: xmlhttp,
      method: "POST",
      dataType: "xml",
      success: function(data) {
          alert("Getting tutorials");
          var tutorials = data.find("loc");
          alert("Found: " + tutorials.length);
          tutorials.each(function() {
              alert("Tutoral author: " + $(this).attr("pg"));
          });
      },
      error: function(jxhr, status, err) {
          alert("Ajax error: status = " + status + ", err = " + err);
      }
    });
    

    编辑

    这属于Same Origin Policy。如果您需要将它放在单独的端口上,您将需要考虑使用 JSONP。

    注意

    从 jQuery 1.5 开始,jQuery 可以将 dataType 从它在 Content-Type 标头中接收到的内容转换为您需要的内容。例如,如果您希望将文本响应视为 XML,请使用“text xml”作为 dataType。您还可以发出 JSONP 请求,将其作为文本接收,并由 jQuery 解释为 XML:“jsonp text xml”。类似地,诸如“jsonp xml”之类的速记字符串将首先尝试从 jsonp 转换为 xml,如果失败,则从 jsonp 转换为文本,然后从文本转换为 xml。

    $.ajax({
        url: xmlhttp,
        method: 'POST',
        dataType: 'jsonp xml',
        success: function(data) {
            alert('Getting tutorials');
            var tutorials = data.find('loc');
            alert('Found: ' + tutorials.length);
            tutorials.each(function() {
                alert('Tutorial author: ' + $(this).attr('pg'));
            });
        },
        error: function() {
            alert('Ajax error: status = ' + status + ', err = ' + err);
        }
    });
    

    参考http://api.jquery.com/jQuery.ajax/

    【讨论】:

    • 不,数据为空。当我触发它时,我没有得到响应,但是 XML 是 XML 解析错误:找不到元素位置:moz-nullprincipal:{1ab824d6-817a-4c37-8256-893e5da80577} 第 1 行,第 1 列:^
    • 你能发布你的 XML 吗?尝试重新创建,但我无法访问 XML 文件。
    • 想通了。是港口。不能用ajax指定端口吗?
    • 不,它属于developer.mozilla.org/en/Same_origin_policy_for_JavaScript,如果您需要在单独的端口上执行此操作,您应该查看 JSONP,我更新了我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 1970-01-01
    • 2011-02-01
    • 1970-01-01
    • 2023-03-30
    • 2018-12-09
    • 2013-08-27
    相关资源
    最近更新 更多