移动到.js文件时,Jquery ajax会出错

时间:2012-04-27 08:54:12

标签: asp.net-mvc-3 jquery

在asp.net MVC3应用程序中我有这个jquery ajax函数

function CheckValue() {
    var Returnvalue ="";
    $.ajax({
        type: 'POST',
        url: '@Url.Action("CheckValue", "Home")',
        async: false,
        success: function (Value) {
            Returnvalue= Value;
        },
        complete: function (IsValid) {
        },
        error: function (xhr, textStatus, errorThrown) {
            alert(errorThrown);
        }

    })
    return Returnvalue;
}

它的作用是从名为CheckValue()的HomeController调用一个返回值的动作。

当我在我的视图页面中使用它时,它工作正常。但随后,我将其移至.js文件MyFunctions.js并将该文件包含在我的视图中

<script src="@Url.Content("~/Scripts/MyFunctions.js")" type="text/javascript"></script>

并且ajax不再起作用了。 我收到警告“未找到”

关于这个问题的任何想法? 非常感谢

2 个答案:

答案 0 :(得分:2)

问题是由于您的代码现在位于.js文件中,但它包含C#代码,特别是@Url.Action("CheckValue", "Home")。不会编译或解释.js个文件,因此会出现错误。此外,您的代码的结构方式不正确。由于AJAX调用是异步的,您需要在success处理程序中返回值。

修复方法是将url作为函数的参数传递:

function CheckValue(url) {
    var Returnvalue ="";
    $.ajax({
        type: 'POST',
        url: url,
        async: false,
        success: function (Value) {
            return Value;
        },
        complete: function (IsValid) {
        },
        error: function (xhr, textStatus, errorThrown) {
            alert(errorThrown);
        }    
    })
}

然后在您的页面中,您可以将C#变量传递给javascript函数:

<script src="@Url.Content("~/Scripts/MyFunctions.js")" type="text/javascript"></script>
<script type="text/javascript">
    CheckValue('@Url.Action("CheckValue", "Home")');
</script>

答案 1 :(得分:0)

注入MVC​​控制器url的更好方法是通过服务器端渲染设置JS

@{
    Layout = null;
    Response.Expires = 120;
    Response.CacheControl = "public";
    Response.ContentType = "text/javascript";
}

MyApp = {};
MyApp.settings = {
    checkValueUrl: "@Url.Action("CheckValue", "Home")"
};