2012-04-05 17 views
0

XML出力を生成するaspxファイルがあります。 別のページで、XMLHttpRequestのopenメソッドを使用して、aspxファイルから出力されたXMLを読み込もうとしています。 FF、IE、SafariはすべてChrome以外で動作するようです。しかし、私が直接アドレスバーのaspxページに移動する場合、クロムについては、XMLは期待どおりに生成されます。 何か助けていただければ幸いです。Google ChromeでXMLHttpRequestを使用して動的に生成されたXMLを読み込めません

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

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

ASPXコードの背後にある:ここで

は、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は動作しません。私たちがそれを取り除くなら、それはうまく動作します。だから、解決策はResponse.Close()のRIDを取得していました。 – user1255409

答えて

1

手作りの代わりにJQuery.ajaxを使用します。

Fiddlerまたはその他のHTTPトレースツールを使用して、すべての要求が期待通りに送受信されていることを確認します。

すぐに間違ったことはありません。読み取り出力のコードはないので、「Chromeではうまくいかない」という意味は明確ではありません。

+0

問題は、XMLを生成するコードにあります。 – user1255409

+0

これで、問題の内容がわかりました。**あなたはそのストリームへの書き込みを終了する前に、下にあるストリーム(Response.Close)を閉じています。だからあなたが正しい場所にその電話を移動する(またはあなたがしたようにそれを削除する)場合、それは動作します。将来の質問については、少なくとも問題が何であるかを考えてみてください。 –

+0

アレクセイ - 私たちが最後にクローズしても、クロームではうまくいきません。その行を取り除くとすべてのブラウザで動作するように見えます。 – user1255409

関連する問題