【问题标题】:cannot load dynamically generated xml using XMLHttpRequest on google chrome无法在谷歌浏览器上使用 XMLHttpRequest 加载动态生成的 xml
【发布时间】:2012-04-19 11:40:40
【问题描述】:

我有一个生成 XML 输出的 aspx 文件。 在另一个页面上,我正在尝试使用 XMLHttpRequest open 方法来读取从 aspx 文件输出的 XML。 FF、IE、Safari 似乎都可以工作,除了 Chrome。但是,在 chrome 上,如果我直接转到地址栏上的 aspx 页面,则会按预期生成 xml。 任何帮助表示赞赏。

这是aspx代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ProviderFinderXML.aspx.cs" Inherits="Pages_ProviderFinderXML" %>

<%@ OutputCache Duration="6" VaryByParam="Type" %>

背后的aspx代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using System.Xml;
using System.ServiceModel.Syndication;
using System.Text;
using System.Data;

public partial class Pages_ProviderFinderXML : System.Web.UI.Page
{    
    protected string appPath = Helper.GetApplicationPath();
    private DataTable dataTable, dataTable2;
    private Helper helper = new Helper();

    protected void Page_Load(object sender, EventArgs e)
    {

    }


    protected override void OnInit(EventArgs e)
    {
        float center_lat = 0, center_lng = 0;
        int radius = 0;
        if (Request.QueryString["lat"] != null)
            center_lat = Common.ConvertToFloat(Request.QueryString["lat"].ToString());
        if (Request.QueryString["lng"] != null)
            center_lng = Common.ConvertToFloat(Request.QueryString["lng"].ToString());
        if (Request.QueryString["radius"] != null)
            radius = Common.ConvertToInt(Request.QueryString["radius"].ToString());
        int categoryId = 0;
        if (Request.QueryString["categoryId"] != null)
            categoryId = Common.ConvertToInt(Request.QueryString["categoryId"].ToString());

        Response.Buffer = false;
        Response.Clear();
        Response.ContentType = "application/xml";
        XmlTextWriter xmlWriter = new XmlTextWriter(Response.Output);
        xmlWriter.WriteStartDocument();

        xmlWriter.WriteStartElement("markers");

        int perPage = 0, currentPage = 1;

        dataTable = helper.DIR_GetNearbyDirectoryMembersByLatLng(center_lat, center_lng, radius, categoryId, perPage, currentPage);

        if (dataTable.Select().Length > 0)
        {
            xmlWriter.WriteAttributeString("title", cRow["title"].ToString().Replace("'", "\\'"));
        }
        xmlWriter.WriteEndDocument();

        xmlWriter.Flush();

        xmlWriter.Close();

        base.OnInit(e);

        Response.Close();
    }


    private string GetFullyQualifiedUrl(string url)
    {
        return string.Concat(Request.Url.GetLeftPart(UriPartial.Authority), ResolveUrl(url));
    }

}

这是调用该 aspx 页面的测试页面代码部分:

<script type="text/javascript">

            $(document).ready(function () {
                searchLocationsNear();
            });

            function searchLocationsNear() {
                var searchUrl = 'http://localhost/integrativediagnosis2/Pages/ProviderFinderXML.aspx?lat=42.3584308&lng=-71.0597732&radius=20';
                var xmlhttp;
                if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
                    xmlhttp = new XMLHttpRequest();
                }
                else {// code for IE6, IE5
                    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
                }
                xmlhttp.open("GET", "ProviderFinderXML.aspx?lat=42.3584308&lng=-71.0597732&radius=20", false);
                xmlhttp.send();
            }

        </script>

【问题讨论】:

  • 问题出在生成 XML 的代码上。显然,如果我们有 Response.Close(); Chrome 不正常。如果我们摆脱它工作正常。所以解决方案是摆脱 Response.Close();

标签: c# javascript jquery asp.net xmlhttprequest


【解决方案1】:

使用 JQuery.ajax 代替手工调用。

使用 Fiddler 或其他 HTTP 跟踪工具确认所有请求均按预期发送/接收。

我没有立即看到任何错误。没有读取输出的代码,因此不清楚“在 Chrome 中不起作用”是什么意思。

【讨论】:

  • 现在我明白了问题所在 - 您正在关闭底层流 (Response.Close) 完成对该流的写入。因此,如果您将该呼叫移动到正确的位置(或像您所做的那样将其删除),它将起作用。对于未来的问题,至少考虑说明问题是什么......
  • Alexei - 即使我们最后关闭它也不适用于 chrome。如果我们取消这条线,它看起来适用于所有浏览器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-02
  • 1970-01-01
  • 2015-10-06
相关资源
最近更新 更多