【发布时间】: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