我想弄清楚以下代码有什么问题:
$(".ReportScore").click(function () {
$.ajax({
type: "GET",
url: "/events/Tournaments/ReportScore",
success: function() {
location.reload();
},
error: function() {
alert("The scores were not recorded");
}
});
});
当我在栏中输入网址时,它没有问题,但是当我尝试进行ajax调用时,我发现404 Page not found错误。
为了澄清,当我点击按钮时,我得到一个弹出窗口,上面写着“没有记录得分”,而且在开发人员工具上,我收到一个脚本错误,说找不到页面。
我还在visusal studio中有一个关于方法本身的断点,但是从来没有打过这个点,因为方法永远不会被调用。
服务器端代码:
public async Task<ActionResult> ReportScore()
{
var a = "abc"
}
var一行永远不会被击中。
编辑:
我从同一个脚本调用了另一个没有问题的ajax调用:
$("#InvitedMember").autocomplete({
source: function (request, response) {
$.ajax({
type: "POST",
url: "/events/Teams/Members",
data: { id: $("#InvitedMember").val() },
success: function (data) {
response($.map(data, function (item) {
return {
label: item.CustomUrl, value: item.CustomUrl
};
}));
}
});
},
create: function () {
$(this).data('ui-autocomplete')._renderItem = function (ul, item) {
return $('<li>')
.append("<a><div>" + item.label + "</div></a>")
.appendTo(ul);
};
},
select: function (event, ui) {
//you can access ui.item to get the selected item object.
$("#InvitedMember").val(ui.item.value);
return false;
}
});
答案 0 :(得分:1)
对您的网址进行硬编码并不是一个好主意。您应该始终使用Url.Action
或Url.RouteUrl
html帮助程序方法来构建您正在访问的操作方法/端点的相对URL。无论您当前的页面/路径如何,这些帮助方法都会正确构建网址。
此外,根据您的评论,似乎事件是IIS中虚拟目录/应用程序名称的名称。 您不应该在代码中使用这些来构建网址,因为它可能会根据您的部署进行更改。如果您希望将代码副本部署到"http://staging.yourSite.com"
?
只要您使用Url.Action
辅助方法,它就会为您的应用构建正确的相对网址,而您无需担心您的IIS虚拟目录/应用程序名称。
var url = "@Url.Action("ReportScore","Tournaments")";
$.ajax({
type: "GET",
url:url,
success: function (res) {
alert('success happened');
//location.reload();
},
error: function () {
alert("The scores were not recorded");
}
});
如果您在剃刀视图中使用上述代码,则该代码将起作用。但是如果您的ajax调用代码在外部js文件中,您可以构建相应的URL到应用程序根目录并将其传递给您的js文件并使用它来构建URL。您可以使用@Url.Content("~")
构建应用根网址。如果需要,您可以构建特定操作方法本身的URL。
<script>
var myApp = myApp || {};
myApp.Urls = myApp.Urls || {};
myApp.Urls.baseUrl = '@Url.Content("~")';
myApp.Urls.reportScoreUrl= '@Url.Action("ReportScore","Tournaments")';
</script>
<script src="~/Scripts/PageSpecificExternalJsFile.js"></script>
在PageSpecificExternalJsFile.js
文件中,您可以像
var myUrlToUser = myApp.Urls.reportScoreUrl;
alert(myUrlToUser);
或使用基本网址构建。
var myUrlToUser= myApp.Urls.baseUrl+"Tournaments/ReportScore";
alert(myUrlToUser);
答案 1 :(得分:0)
问题似乎不在您的javascript代码中,而是您的控制器操作方法(如果它确实是如何编写的)
public async Task<ActionResult> ReportScore()
{
var a = "abc"
}
您的代码块不显示任何return语句,请确保等待您的返回值。
即
return await "abc"