Javascript 为什么我不能这样做?

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

函数名在当前上下文中不存在,这是它给我的错误。我想要一个动态ajax调用。为什么会发生这种情况?我得到的处理程序都是服务器端处理的,但我不知道如何绕过这个问题

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替换了,只是用JavaScript
url:“AdminTools/”+functionName
构造字符串,我只是想把助手作为一个参数,在ajax调用中硬编码Url不被认为是不好的做法吗?这不是最好的做法,但没有更多的上下文。这是解决方案的要点。
@Url.Action()
是razor代码,在发送到客户端之前在服务器上进行评估
functionName
是一个客户端javascript变量,在该点上不存在(它不在范围内),这不是它的工作方式
@Url.Action
调用在服务器端调用。当你的脚本运行时,它已经被一个实际的url替换了,只是用JavaScript
url:“AdminTools/”+functionName
构造字符串,我只是想把助手作为一个参数,在ajax调用中硬编码Url不被认为是不好的做法吗?这不是最好的做法,但没有更多的上下文。这是解决方案的要点。
@Url.Action()
是razor代码,在发送到客户端之前在服务器上进行评估
functionName
是一个客户端javascript变量,此时不存在(它不在范围内)这是一个很好的答案!我投了一票。为了清楚起见,我们可以从函数构造中删除“functionName”参数吗?如“var getManager=function(contentDiv){……….”这更像是一个抽象的答案,显示了如何解耦信息。如果您需要针对当前问题的特定内容,我强烈建议您使用“提问”按钮。否则,这些评论将对与此问题无关的问题过于喋喋不休。不,我只是认为解决问题有价值删除参数(functionName)以免混淆…;-)谢谢你的回答。回答得很好!得到了我的支持。为了清楚起见,我们可以从函数构造中删除“functionName”参数吗?如“var getManager=function(contentDiv){…….”这更像是一个抽象的答案,显示了如何解耦信息。如果您需要针对当前问题的特定内容,我强烈建议您使用“提问”按钮。否则,这些评论将对与此问题无关的问题过于喋喋不休。不,我只是认为解决问题有价值删除参数(functionName),以免混淆…;-)感谢您的回复。