2012-04-05 25 views
0

我有一個生成XML輸出的aspx文件。 在另一頁上,我嘗試使用XMLHttpRequest打開方法來讀取從aspx文件輸出的XML。除了Chrome之外,FF,IE,Safari都可以工作。但是,如果我直接進入地址欄上的aspx頁面,就會在chrome中按預期方式生成xml。 任何幫助表示讚賞。無法加載在Chrome瀏覽器上使用XMLHttpRequest動態生成的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> 
+0

問題在於生成XML的代碼。顯然,如果我們有Response.Close(); Chrome不表現出來。如果我們擺脫它的工作正常。因此,解決方案將獲得RID的Response.Close(); – user1255409 2012-04-05 18:57:18

回答

1

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

使用Fiddler或其他HTTP跟蹤工具來確認所有請求都是按照您的預期發送/接收的。

我沒有看到任何錯誤。沒有讀取輸出的代碼,所以目前還不清楚「Chrome無法正常工作」的含義。

+0

問題出在生成XML的代碼上。 – user1255409 2012-04-05 18:55:16

+0

現在我看到了什麼問題 - 在完成寫入該流之前,您正在關閉基礎流(Response.Close)**。所以如果你把這個電話轉移到正確的地方(或者像你那樣去掉它),它就會起作用。對於未來的問題,至少要說明問題是什麼...... – 2012-04-05 19:57:06

+0

阿列克謝 - 即使我們最後關閉它不適用於鉻。看起來像是在所有的瀏覽器上都能正常工作。 – user1255409 2012-04-20 21:05:36

相關問題