Jquery 外部javascript不起作用,而内部javascript起作用

Jquery 外部javascript不起作用,而内部javascript起作用,jquery,asp.net-mvc,Jquery,Asp.net Mvc,我有一个mvc4网页,其中有一个@Html.TextBox() 这个文本框有一个keyup监听器,它将启动对项目的ajax搜索,并在结果成功时更新视图 var timeoutReference; var timeoutforloading; $(function () { $("#searchingForProject").keyup(function () { timeoutReference = setTimeout(function () {

我有一个mvc4网页,其中有一个
@Html.TextBox()

这个文本框有一个
keyup
监听器,它将启动对项目的ajax搜索,并在结果成功时更新视图

var timeoutReference;
var timeoutforloading;
$(function () {

   $("#searchingForProject").keyup(function () {
        timeoutReference = setTimeout(function () {
            timeoutforloading = setTimeout(function () {
                $("#imageWebGridLoad").show();
                $("#gridcontent").hide();
            }, 250);

            var value = $("#searchingForProject").val();
            $.ajax({
                url: '@Url.Action("Index", "Project")',
                contentType: 'application/html; charset=utf-8',
                type: "GET",
                dataType: 'html',
                data: { searchString: value },
            }).success(function (result) {

                $('projects').html(result);
                clearTimeout(timeoutforloading);
            });
        }, 750);
    });
});
问题是,如果将此函数放在内部的
中,它就可以正常工作,但如果将其放在外部javascript文件中,它将不会给出任何结果

我知道它调用函数,如
$(“#imageWebGridLoad”).show()将在0.25秒后开始旋转


是我的Ajax调用中有什么地方出错了,还是在这样的外部js文件中不可能这样做?

我不使用MVC4,但我猜现在js是外部的,ASP没有将
@Url.Action(“Index”,“Project”)
转换为实际的Url以用于Ajax。我相信,如果您在HTML中将此信息作为隐藏的
div
,然后使用jQuery选择器将其调用,您将能够随心所欲地使用它:

// HTML
<div id="ajaxurl" class="hidden">@Url.Action("Index", "Project")</div>

// JS
$.ajax({
  url: $('#ajaxurl').text(),
  // ...
})
//HTML
@Url.Action(“索引”、“项目”)
//JS
$.ajax({
url:$('#ajaxurl').text(),
// ...
})
(谢谢Satpal)

//HTML
//JS
$.ajax({
url:$('#ajaxurl')。数据('url'),
// ...
})
仅在视图文件中,@Url.Action(“索引”、“项目”)被替换为真实Url。在视图文件中将其声明为变量

 <script>
   var sUrl = '@Url.Action("Index", "Project")';
 </script>
编辑:

另一种方法是通过类似视图的方式提供原始js

<script src="@Url.Action("Index", "ExternalJS")"></script>


并将“ExternalJS”方法放在索引控制器上,以使用原始javascript为视图提供服务。

将@Url.Action(“Index”,“Project”)放在外部javascript文件中时,它是如何运行的?:)最好将url添加为数据属性,而不是创建一个隐藏的div。第二种方法是我已经使用了几年的方法,因为外部javascript对视图是不可知的。数据属性的使用太少了!谢谢@Andy!这正是我想要的。我不知道我不能在外部Javascript文件中使用
@Url…
。出于兴趣,如果OP试图将JS与视图分离,那么在视图中引入更多JS有什么帮助?
 <script>
   var sUrl = '@Url.Action("Index", "Project")';
 </script>
 $.ajax({
   url: sUrl,
 ...
<script src="@Url.Action("Index", "ExternalJS")"></script>