JQuery .ajax() 函数调用不起作用,但成功方法运行

JQuery .ajax() function call not working, but success method runs

本文关键字:成功 方法 运行 不起作用 ajax 函数调用 JQuery      更新时间:2023-09-26

我在网页上遇到ajax调用时遇到问题。网络方法工作得很好。

我可能会看到的一个潜在问题是,调用 ajax 方法的代码位于嵌入在母版页的内容页中的 UserControl 中。只有在验证 .Net 身份验证后才能访问此页面。我不知道是否有这件事,我只是包括这些信息,所以这个问题没有隐藏的方面。

另一个潜在的问题可能是Ajax调用本身。我只是看不出问题是什么。最令人困惑的是,ajax调用中的成功方法运行。没有失败。更令人困惑的是,如果我将 WebMethod 的名称完全更改为其他名称,ajax 调用的成功方法仍然运行。

知道这里可能出了什么问题吗?

var sendingThis = { x: 'abc', y: 'def', z: 'ghi' }
$.ajax(
{
    type: "POST",
    url: "TestPage.aspx/someMethod",
    data: sendingThis,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    async: true,
    cache: false,
    success: function (msg)
    {
         //THIS STUFF GETS CALLED...always
    },//end success
    error: function () 
    { 
      //DOESN'T GET CALLED 
    }
});

TestPage.aspx中的代码隐藏方法:

[System.Web.Services.WebMethod]
public static void someMethod(string x, string y, string z) 
{
    //CODE THAT UPDATES DATABASE; *INDEPENDENTLY CONFIRMED WORKING* 
}

调用代码的按钮..:

<asp:Button ID="btnSomeMethod" runat="server" OnClientClick="return someMethod(this);" Text="Runit" />

我有一些额外的观察结果,可能会有所帮助,也可能没有帮助。我尝试将ResolveURL与 .ajax() 调用的 URL 一起使用,但不起作用。我还尝试EnableSession:true作为 Web 方法的属性。我尝试在页面中插入一个ScriptManager,其中包含对包含 Ajax() 调用的.js文件的EnablePageMethods="true"ScriptReference。没有任何运气。这到底是怎么回事?

另一个更新:我检查了HTTP流以查看来自POST请求的响应标头。首先,它返回 200 OK 作为 POST 状态代码。要求似乎都很好。但是,在响应标头中,我得到:

`"status":401,"headers":`

这与身份验证错误有关。

答案归结为两个正斜杠//..在 RouteConfig.cs 中,您需要注释掉以下行:

settings.AutoRedirectMode = RedirectMode.Permanent;

就是这样,仅此而已。