2010-11-20 5 views
1

J'ai une page ASP.net qui génère un fichier XML dynamique mais l'instruction get d'une requête jquery ajax ne reconnaît pas le fichier. cette solution a fonctionné avec un doc php obtenant le xml dynamique. La page asp.net qui génère xml fonctionne très bien. La requête ajax ne réussit jamais. des idées pour expliquer pourquoi beaucoup appréciéProblème lors de l'obtention du fichier XML dynamique

<%@ Page Language="C#" AutoEventWireup="true" Debug="true" ContentType="text/xml" %> 
<%@ Import Namespace="System.Xml" %> 
<%@ Import Namespace="System.Data.SqlClient" %> 
<%@ Import Namespace="System.Data" %> 
    <script runat="server"> 
     protected void Page_Load(object source, EventArgs e) 
     { 
      XmlDocument doc = new XmlDocument(); 
      // XML declaration 
      XmlNode declaration = doc.CreateNode(XmlNodeType.XmlDeclaration, null, null); 
      doc.AppendChild(declaration); 

      // Root element: article 
      XmlElement root = doc.CreateElement("statements"); 
      doc.AppendChild(root); 

      string connStr = ""; 
      string sqlStr = "SELECT [title], [statement] FROM [a table]"; 
      using (SqlConnection connection = new SqlConnection(connStr)) 
      { 
       using (SqlCommand command = connection.CreateCommand()) 
       { 
        command.CommandText = sqlStr; 

        connection.Open(); 
        using (SqlDataReader dataReader = command.ExecuteReader()) 
        { 
         int indexOftitle = dataReader.GetOrdinal("title"); 
         int indexOfstatement = dataReader.GetOrdinal("statement"); 

         while (dataReader.Read()) 
         { 
          string title = (string)dataReader.GetValue(indexOftitle); 
          string statement = (string)dataReader.GetValue(indexOfstatement); 

          XmlElement xstatement = doc.CreateElement("statement"); 
          root.AppendChild(xstatement); 

          XmlAttribute xtitle = doc.CreateAttribute("title"); 
          xtitle.Value = title; 
          xstatement.Attributes.Append(xtitle); 

          XmlAttribute xtext = doc.CreateAttribute("text"); 
          xtext.Value = statement; 
          xstatement.Attributes.Append(xtext); 
         } 
        } 
        connection.Close(); 
       } 
      } 


      doc.Save(Response.OutputStream); 
     } 
    </script> 
<script type="text/javascript"> 
     $.ajax({ 
      type: "GET", 
      url: "../data/genxml_docstate.aspx", 
      dataType: "xml", 
      success: parseXml 
     }); 
    }); 
    function parseXml(xml) { 
     alert("ok"); 
     var items = []; 
     var header = 'some initial html' 
     $(xml).find("statement").each(function() { 
      var title = $(this).attr("title"); 
      var titleid = (title.substr(0, 8)).replace(" ", "_"); 
      items.push('<li id="' + titleid + '">' + title + '</li>'); 
     }); 

     $('#doclist').append(items.join('')); 
     $("#doc_box_right").html(header); 

     $(xml).find("statement").each(function() { 
      var title = $(this).attr("title"); 
      var titleid = (title.substr(0, 8)).replace(" ", "_"); 
      var id = '#' + titleid; 
      var statement = $(this).attr("text"); 
      $(id).css("cursor", "pointer"); 
      $(id).mouseover(function() { 
       $(id).css("background-color", "gray"); 
       $("#doc_box_right").html('<h2>' + title + '</h2><p>' + statement + '</p>'); 
      }); 
      $(id).mouseleave(function() { 
       $(id).css("background-color", "transparent"); 
       $("#doc_box_right").html(header); 
      }); 
     }); 

    } 
</script> 
+0

essayez de réussir comme ce succès: function (data) {} – kobe

+1

juste mettre une alerte à l'intérieur du succès ci-dessus avec la sytax je l'ai mentionné. et même vous pouvez avec panneau firebug .net si vous obtenez des données ou non. – kobe

+0

@gov - la fonction de succès ajax a bien fonctionné avant ... ?? –

Répondre

1

@Chris, pouvez-vous essayer panel firebug .net et voir si vous obtenez des résultats pour l'ajax ... afin que nous puissions éliminer le problème.Il montre les erreurs aussi s'il y en a.

1

Vous ne définissez pas le type MIME de la réponse à text/xml, de sorte que le navigateur ne reconnaît pas comme XML.

Assurez-vous d'ajouter un:

Response.ContentType("text/xml"); 

avant d'enregistrer le flux de sortie.

+0

J'ai essayé cela mais cela n'a pas fonctionné –

+2

@Chris, pouvez-vous essayer le panneau firebug .net et voir si vous obtenez des résultats pour l'ajax ... afin que nous puissions éliminer le problème.Il montre les erreurs aussi s'il y a tout. – kobe

+0

@put un point de rupture également dans le code studio visuel, vous pouvez voir si le serveur lance une erreur, sélectionnez la rupture dans execptions de l'option studio visuel – kobe

Questions connexes