Frage

Ich habe, was eine relativ einfache Aufgabe sein sollte, die offen gesagt hat mich ratlos. Ich habe recherchiert, bis mein Gehirn gebraten wird, und jetzt Tochern ich, und euch um Hilfe zu bitten.

Hier ist das Szenario:

  • Ich habe eine ASPX-Seite (Q2.aspx), die mit dem WebService verziert ist, WebServiceBinding und ScriptService Attribute.
  • Diese Seite enthält eine Methode, GetAllContacts, die mit dem WebMethod verziert eine Zeichenfolge enthält JSON Datenattribut und kehrt zurück. (Für das, was es wert ist, die Seite selbst enthält keine weiteren Kontrollen oder Funktionalität.)
  • ich eine HTML-Seite, die JavaScript enthält, die die XmlHttpRequest verwendet Gegenstand der GetAllContacts WebMethod auf der ASPX-Seite aufzurufen und zu transformieren die JSON-Daten in eine HTML-Tabelle.
  • Ich habe festgestellt, dass meine Web.Config Datei die entsprechenden Protokollhandler enthält für HttpGet und HttpPut im WebServices Abschnitt unter System.Web.webServices.
  • Ich habe festgestellt, dass meine Web.Config Datei, um den ScriptModule Eintrag unter der enthält System.webServer.modules Abschnitt, und dass es passt in der entsprechenden Dokumentation.

Allerdings, wenn ich die HTML-Seite in einem Browser anzeigen, geschieht Folgendes:

  • Die Web-Anfrage durchläuft, aber die Ergebnisse sind für die nicht verarbeitete HTML aus der ASPX-Seite.
  • Die GetAllContacts Methode nie aufgerufen wird, wie durch einen Haltepunkt in der Code-Einstellung.
  • Der Code den Web-Dienst aufzurufen, wird jedoch aufgerufen, und der JavaScript-Rückruf Funktion, die auf Anfrage Beendigung aufgerufen wird richtig aufgerufen.

Es scheint, dass der JavaScript-Code weitgehend korrekt eingerichtet ist, aber aus irgendeinem Grund, der mich völlig an dieser Stelle entweicht, wird die HTML-Seite einfach nicht die WebMethod auf der ASPX-Seite ausführen, und gibt einfach die Seite, als ob es eine einfache HTML-GET Anfrage war. Natürlich kann ein HTML-Dokument nicht von JavaScripts eval Funktion ausgewertet werden, was mich zu meinem Problem mit sich bringt. (Beachten Sie auch, dass die JSON-Daten nirgends in der HTML angezeigt wird, die zurückgegeben wird.)

Ich bin, ehrlich gesagt, verblüfft. Ich habe schon in Dutzenden von Microsoft Artikel sah, Stackoverflow Beiträge, Artikel Codeproject, und wer weiß was sonst noch. Mein Code Aussehen wie es ist okay. Aber ich weiß es besser. Mir fehlt etwas einfach, dumm und offensichtlich. Ich jemanden brauchen nur es mir, darauf hinzuweisen.

Im Folgenden finden Sie den ASPX-Seite Code finden und den HTML-Code, in der Hoffnung, dass sie etwas Licht werden.

ASPX-Code

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Q2.aspx.cs" Inherits="Satuit.Q2" enablesessionstate="False" %>
<html>
    <body>
        <form runat="server" id="frmMain"/>
    </body>
</html>
-- Codebehind
using System.IO;
using System.Web;
using System.Web.Script.Services;
using System.Web.Services;
using System.Web.UI;
using System.Xml;
using System.Xml.XPath;
using System.Xml.Xsl;

namespace Satuit
{
    [WebService(Namespace="http://tempuri.org")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    [ScriptService]
    public partial class Q2 : Page
    {

        [WebMethod]
        public static string GetAllContacts()
        {
            return LoadJsonData();
        }

        private static string LoadJsonData()
        {
            using (var stringWriter = new StringWriter())
            {

                string xmlUri = HttpContext.Current.Server.MapPath("\\XmlData\\Contacts.xml");
                string xslUri = HttpContext.Current.Server.MapPath("\\XmlData\\Q2.xsl");

                using (var xmlTextReader = new XmlTextReader(xmlUri))
                {
                    var xpathDocument = new XPathDocument(xmlTextReader);
                    var xslTransform = new XslCompiledTransform();

                    xslTransform.Load(xslUri);
                    xslTransform.Transform(xpathDocument, null, stringWriter);

                    return stringWriter.ToString();
                }
            }
        }
    }
}

HTML-Code     

    var objectData; // Receives the objectified results of the JSON request.

    var xmlhttp;
    if(window.XMLHttpRequest) {
        xmlhttp = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    }

    xmlhttp.open("GET", "/Q2.aspx/GetAllContacts", true);
    xmlhttp.setRequestHeader("content-type", "application/x-www-form-urlencoded");
    xmlhttp.onreadystatechange = function () 
    {
        if (xmlhttp.readyState == 4) 
        {
            if (xmlhttp.status == 200)
            {
                var jsonResultBuffer = xmlhttp.responseText;
                objectData = eval(jsonResultBuffer);
                DisplayTable();
            }
        }
    };
    xmlhttp.send(null);

    function DisplayTable()
    {       
        var sHtml = "";     
        sHtml = "<table><tr><th>ID</th><th>First</th><th>Last</th><th>Address</th></tr>";           
        for(i = 0; i < objectData.length; i++)
        {
            sHtml += "<tr>";
            sHtml += "<td>" + objectData.ID;
            sHtml += "<td>" + objectData.firstName + "</td>";
            sHtml += "<td>" + objectData.lastName + "</td>";
            sHtml += "<td>" + objectData.address + "</td>"; 
            sHtml += "</tr>"
        }
        sHtml += "</table>"         
        document.getElementById("divTable").innerHTML = sHtml;
    }    
</script>

         

Dev Umwelt Details

  • Vista Ultimate SP 2
  • Visual Studio 2008
  • .NET Framework 3.5
  • wird Lösung noch nicht bereitgestellt wurde, so ist es in dem „lokalen Webserver“ läuft von Visual Studio zur Verfügung gestellt. (Wundert mich, wenn ich nicht gerade bereitstellen sollte IIS unter Vista).
  • Beachten Sie, dass die ASPX-Seite die WebMethod und die HTML-Seite residieren enthält, innerhalb die gleiche Lösung.
War es hilfreich?

Lösung

versucht Pls den folgende Jquery mit dem Web-Service zugänglich ist oder nicht zu sehen.

$.ajax({
        type: "POST",
        url: "Q2.aspx/GetAllContacts",
        data: "",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(response) {
           alert("success");
        },
        error: function(response, aa) {
            alert("fail");
        }
    });

Thurein

Andere Tipps

Ich denke, wir müssen mit POST-Anfrage Web-Methode aufrufen versuchen, diesen Teil des Codes zu ändern

xmlhttp.open("POST", "/Q2.aspx/GetAllContacts", true);
xmlhttp.setRequestHeader("content-type", "application/json");
xmlhttp.setRequestHeader("Accept", "application/json");
xmlhttp.onreadystatechange = function () 
{
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) 
    {
            var jsonResultBuffer = JSON.parse(xmlhttp.responseText);
            objectData = jsonResultBuffer.d;
            DisplayTable();
    }
};

Antwort wird im JSON-Format mit "d" als Schlüssel in xmlhttp.responseText

zurück
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top