Javascript 为什么我不能这样做?
函数名在当前上下文中不存在,这是它给我的错误。我想要一个动态ajax调用。为什么会发生这种情况?我得到的处理程序都是服务器端处理的,但我不知道如何绕过这个问题Javascript 为什么我不能这样做?,javascript,ajax,asp.net-mvc,Javascript,Ajax,Asp.net Mvc,函数名在当前上下文中不存在,这是它给我的错误。我想要一个动态ajax调用。为什么会发生这种情况?我得到的处理程序都是服务器端处理的,但我不知道如何绕过这个问题 var getManager = function (functionName, contentDiv) { console.log("aircraft manager refresh called"); $.ajax({ type: "GET", url: '@Url.Action(fun
var getManager = function (functionName, contentDiv) {
console.log("aircraft manager refresh called");
$.ajax({
type: "GET",
url: '@Url.Action(functionName, "AdminTools")',
cache: false,
data: {},
error: function () {
alert("An error occurred.");
},
success: function (data) {
$("#".concat(contentDiv)).html(data);
}
});
}
我强烈建议您不要将服务器端代码和客户端代码结合在一起,例如:
$.ajax({
type: "GET",
url: '@Url.Action(functionName, "AdminTools")', //THIS
这将变成一场维护噩梦。相反:
<div id="#contentDiv" data-url="@Url.Action(functionName, "AdminTools")">
@* content *@
</div>
如果您以后决定使用多个ContentDiv,则每个ContentDiv都可以有自己的url,并且您的代码可以重复使用。我强烈建议您不要将服务器端代码和客户端代码结合在一起,例如:
$.ajax({
type: "GET",
url: '@Url.Action(functionName, "AdminTools")', //THIS
这将变成一场维护噩梦。相反:
<div id="#contentDiv" data-url="@Url.Action(functionName, "AdminTools")">
@* content *@
</div>
如果您以后决定使用多个ContentDiv,那么每个ContentDiv都可以有自己的url,并且您的代码可以重用。这不是它的工作方式
@Url.Action
调用在服务器端调用。当你的脚本运行时,它已经被一个实际的url替换了,只是用JavaScripturl:“AdminTools/”+functionName
构造字符串,我只是想把助手作为一个参数,在ajax调用中硬编码Url不被认为是不好的做法吗?这不是最好的做法,但没有更多的上下文。这是解决方案的要点。@Url.Action()
是razor代码,在发送到客户端之前在服务器上进行评估functionName
是一个客户端javascript变量,在该点上不存在(它不在范围内),这不是它的工作方式@Url.Action
调用在服务器端调用。当你的脚本运行时,它已经被一个实际的url替换了,只是用JavaScripturl:“AdminTools/”+functionName
构造字符串,我只是想把助手作为一个参数,在ajax调用中硬编码Url不被认为是不好的做法吗?这不是最好的做法,但没有更多的上下文。这是解决方案的要点。@Url.Action()
是razor代码,在发送到客户端之前在服务器上进行评估functionName
是一个客户端javascript变量,此时不存在(它不在范围内)这是一个很好的答案!我投了一票。为了清楚起见,我们可以从函数构造中删除“functionName”参数吗?如“var getManager=function(contentDiv){……….”这更像是一个抽象的答案,显示了如何解耦信息。如果您需要针对当前问题的特定内容,我强烈建议您使用“提问”按钮。否则,这些评论将对与此问题无关的问题过于喋喋不休。不,我只是认为解决问题有价值删除参数(functionName)以免混淆…;-)谢谢你的回答。回答得很好!得到了我的支持。为了清楚起见,我们可以从函数构造中删除“functionName”参数吗?如“var getManager=function(contentDiv){…….”这更像是一个抽象的答案,显示了如何解耦信息。如果您需要针对当前问题的特定内容,我强烈建议您使用“提问”按钮。否则,这些评论将对与此问题无关的问题过于喋喋不休。不,我只是认为解决问题有价值删除参数(functionName),以免混淆…;-)感谢您的回复。