2016-07-10 7 views
3

У меня возникли проблемы с созданием WebMethod для работы. Все настроено правильно, и я упростил его до наименьшего примера.AJAX не запускает WebMethod, но возвращает всю HTML-страницу при успешном завершении

АЯКС:

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!") 
    } 
}); 
} 

WebMethodfaq.aspx.cs, используя System.Web.Services и общественности статической):

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

HTML (faq.aspx с ScriptManager и 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> 

При нажатии на вызов AJAX возвращает успех со следующим содержимым в данных: http://pastebin.com/X0Vke0qj

точку останова в DoAJAX()WebMethod так и не был достигнут.

Почему не возвращают «Test AJAX» строка, которая была отправлена, почему WebMethod не попал?

+0

Я только попробовал, и я получаю то же самое ответ (data = целостный HTML-документ). И точка останова в WebMethod не запускается. – Tiago

+0

В вашем 'web.config' у вас также есть' ScriptModule', зарегистрированный в 'httpModules'? Если это не будет, это тоже не сработает. – Scott

+0

Скотт: У меня нет ScriptModule в web.config (довольно пусто), можете ли вы более подробно объяснить, что добавить? Также ваше предыдущее предложение не сработало. («error!») – Tiago

ответ

1

Изменить тип json, добавить тип контента и данные, передать параметр foo как json.

$.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

Я скопировал весь AJAX и заменил мой, а затем запустил его. Я получаю «ошибку!». оповещения. – Tiago

+0

Возможно, это связано с тем, что вы внесли другие изменения в свое приложение, например, эти изменения в свой web.config. Отмените все изменения. Если вы по-прежнему получаете сообщение об ошибке xhr, статусе и переменных ошибки, которые я добавил и расскажу, какую ошибку вы получите. – derloopkat

+0

С вашим ответом: xhr: http: // pastebin.com/7kFLWbCd - ошибка: «Внутренняя ошибка сервера» – Tiago

0

Изменить код так:

.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> 

Код:

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

Я скопировал всю вашу функцию и запустил ее. Я получаю «ошибку!». оповещения. – Tiago

+0

Скопируйте и вставьте код точно так, как он есть. Не добавляйте лишнюю логику или элементы управления, и он будет работать. Он отлично работает на моей стороне –