Jquery 外部javascript不起作用,而内部javascript起作用
我有一个mvc4网页,其中有一个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 () {
@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>