【问题标题】:Ajax firing success event but not getting to the web methodAjax 触发成功事件但未访问 Web 方法
【发布时间】:2017-10-24 14:45:10
【问题描述】:

我正在使用 ajax 调用服务器端函数。出于某种原因,成功正在触发,但没有达到功能 这是javascript

<script type="text/javascript">

$(document).ready(function () {
    $.ajax({
        url: "Server.aspx/sendEmail",
        data: { name: "foo", company: "bar", country: "foo", email: "bar", msg: "bla" },
        async: false,

        success: function (data) {
            var a = 3;
        },
        error: function (a, b) {
            alert("error");
            var a = 43;

        }
    });
});

这里是c#

[WebMethod]
public static string sendEmail(string name, string company, string country, string email, string msg)
{
    //somecode here
}

数据消息(由于某种原因它被破坏了)

<form method="post" action="./sendEmail?%7b%22name%22%3a%22foo%22%2c%22company%22%3a%22bar%22%2c%22country%22%3a%22foo%22%2c%22email%22%3a%22bar%22%2c%22msg%22%3a%22bla%22%7d" id="form1">
<div>

</div>

<input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="368A1591" />

【问题讨论】:

  • 没有得到 which 功能...? ajax 成功触发并不一定意味着您的 C# 实际发送了一封电子邮件,只是该 ajax 得到了来自服务器的有效响应。
  • 它没有到达 C# web 方法。(sendEmail)
  • AJAX 调用默认使用 GET,但您需要 POST。将type: "post" 添加到选项中。另外,您使用的是哪个版本的 .Net?我花了很长时间让 Web 方法与 .Net 2.0 aspx 文件一起工作。
  • 添加类型:“post”没有帮助,我使用的是 .NET 4.5
  • P.S.你为什么使用async:false?它在某些浏览器中已被弃用,因此您可以预期它将来会停止工作。此外,它在现实中几乎没有必要,它会导致糟糕的用户体验——它会锁定整个浏览器,所以如果请求花费的时间比预期的要长,用户可能会认为浏览器已经崩溃并杀死它。

标签: javascript c# jquery ajax


【解决方案1】:

在调用 ASP.NET AJAX 页面方法时,请注意以下几点:

  • 要使用ASP.NET AJAX page methods,您需要发出POST 请求。这是为了防止CSRF

  • 确保将contentType 设置为application/json

  • 使用JSON.stringify 将JavaScript 对象转换为JSON 文本。

您的 JS 代码可能类似于以下内容:

$(document).ready(function () {
    var data = { name: "foo", company: "bar", country: "foo", email: "bar", msg: "bla" };
    $.ajax({
        url: "Server.aspx/sendEmail",
        type: "POST",
        data: JSON.stringify(data),
        async: false,
        contentType: 'application/json',
        success: function (data) {
            //Do something 
        },
        error: function (xhr) {
            alert('Request Status: ' + xhr.status
                + ' Status Text: ' + xhr.statusText
                + ' ' + xhr.responseText);
        }
    });
});

如果仍然无法正常工作,请检查statusText 是否有错误。

【讨论】:

  • 它告诉我:尝试使用 POST 请求调用方法 \u0027sendEmail\u0027,这是不允许的
  • 您是否在sendEmail 函数中添加了任何属性?
  • 是的,我在检查时做过。它现在正在工作。非常感谢!
  • 不错!很高兴能提供帮助。
猜你喜欢
  • 2014-01-12
  • 1970-01-01
  • 2018-09-07
  • 2011-12-09
  • 2020-01-26
  • 1970-01-01
  • 2018-01-27
  • 2014-02-26
  • 1970-01-01
相关资源
最近更新 更多