AJAX不会触发WebMethod,但会在成功时返回整个HTML页面

时间:2016-07-10 14:07:09

标签: c# asp.net ajax webmethod scriptmanager

我无法使WebMethod工作。所有设置都正确,我已将其简化为最小的例子。

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 (在 faq.aspx.cs 中,使用 System.Web.Services ;以及 public static ):

[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 中的断点。

为什么不返回&#34; AJAX测试&#34;发送的字符串,为什么 WebMethod 没有被点击?

2 个答案:

答案 0 :(得分: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!")
    }
});

答案 1 :(得分: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;
    }
}