2016-07-10 27 views
3

Ich habe Probleme, eine WebMethod zu arbeiten. Es ist alles richtig eingerichtet, und ich habe es auf das kleinste Beispiel vereinfacht.AJAX löst WebMethod nicht aus aber gibt ganze HTML-Seite bei Erfolg zurück

AJAX:

function DoAJAX() { 
$.ajax({ 
    type: 'POST', 
    url: 'faq.aspx/DoAJAX', 
    data: "AJAX Test", 
    dataType: 'text', 
    success: function (data, status) { 
     debugger; 
     alert(status + " " + data) 
    }, 
    error: function() { 
     alert("error!") 
    } 
}); 
} 

WebMethod (in faq.aspx.cs, unter Verwendung von System.Web.Services und public static):

[WebMethod] 
    public static string DoAJAX(string foo) { 
     return foo; 
    } 
} 

HTML (faq.aspx, mit Script und EnablePageMethods)

<%@ Page Title="" Language="C#" MasterPageFile="~/MP.Master" AutoEventWireup="true" CodeBehind="faq.aspx.cs" Inherits="Lottery.faq" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server"> 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> 
    <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true"></asp:ScriptManager> 
    <input type="button" value="AJAX" onclick="DoAJAX()" /> 
</asp:Content> 

Wenn Sie darauf klicken, kehrt der AJAX-Aufruf einen Erfolg mit folgendem Inhalt in Daten: http://pastebin.com/X0Vke0qj

Ein Haltepunkt in DoAJAX()WebMethod wird nie erreicht.

Warum es nicht zurück, die „AJAX-Test“ Zeichenfolge, die gesendet wurde, warum die WebMethod nicht getroffen wird?

+0

Ich habe gerade versucht, und ich bekomme die gleiche Antwort (Daten = ganzes HTML-Dokument). Und der Haltepunkt in WebMethod wird nicht ausgelöst. – Tiago

+0

Haben Sie in Ihrer 'web.config' auch' ScriptModule' unter 'httpModules' registriert? Wenn das fehlt, wird es auch nicht funktionieren. – Scott

+0

Scott: Ich habe kein ScriptModule in web.config (ist ziemlich leer), können Sie genauer erklären, was Sie bitte hinzufügen? Auch dein vorheriger Vorschlag hat nicht funktioniert. ("Fehler!") – Tiago

Antwort

1

Ändern Sie den Typ in JSON, fügen Sie den Inhaltstyp hinzu und geben Sie foo als JSON-Parameter an.

$.ajax({ 
    type: 'POST', 
    url: 'faq.aspx/DoAJAX', 
    data: "{ 'foo': 'AJAX Test' }", 
    contentType: "application/json; charset=utf-8", 
    dataType: 'json', 
    success: function (data, status) { 
     alert(status + " " + data.d) 
    }, 
    error: function (xhr, status, error) { 
     alert("error!") 
    } 
}); 
+0

Ich habe deine ganze AJAX kopiert und meine ersetzt, dann starte es. Ich bekomme "Fehler!" aufmerksam. – Tiago

+0

Es kann sein, dass Sie andere Änderungen in Ihrer Anwendung wie diese Änderungen in Ihrer web.config vorgenommen haben. Bitte machen Sie alle Änderungen rückgängig. Wenn Sie immer noch einen Fehler erhalten, überprüfen Sie xhr, Status und Fehlervariablen, die ich hinzugefügt habe, und sagen Sie mir, welchen Fehler Sie bekommen. – derloopkat

+0

Mit Ihrer Antwort: xhr: http: // Pastebin.com/7kFLWbCd - Fehler: "Interner Serverfehler" – Tiago

0

Ändern Sie den Code wie folgt aus:

.ASPX:

<head runat="server"> 
    <title></title> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.3/jquery.min.js"></script> 
    <script type="text/javascript"> 
     $(function() { 
      $("#btnCallAjax").click(function() { 
       DoAJAX(); 
      }); 

      function DoAJAX() { 

       $.ajax({ 
        type: "POST", 
        url: "faq.aspx/DoAJAX", 
        contentType: "application/json;charset=utf-8", 
        data: '{foo:"AJAX Test"}', 
        success: function (data, status) { 
         debugger; 
         alert(status + " " + data.d) 
        }, 
        error: function() { 
         alert("error!") 
        } 
       }); 
      } 
     }); 
    </script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <input type="button" id="btnCallAjax" value="Call AJAX" /> 
    </form> 
</body> 

-Code hinter:

public partial class faq : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
    [WebMethod] 
    public static string DoAJAX(string foo) 
    { 
     return foo; 
    } 
} 
+0

Ich habe Ihre gesamte Funktion kopiert und ausgeführt. Ich bekomme "Fehler!" aufmerksam. – Tiago

+0

Kopieren Sie den Code und fügen Sie ihn genau so ein, wie ich ihn habe. Fügen Sie keine zusätzliche Logik oder Steuerelemente hinzu und es funktioniert. Es funktioniert auf meiner Seite einwandfrei –