jQuery从Ajax链接加载内容
我有一个-link元素,它具有href链接到页面,但我必须使用Ajax从href -url加载该内容,而不是将用户重定向到该页面。 如何修改链接以仅加载该链接中的内容,以便将内容注入当前页面?
Link
我做了这个,但它不起作用。
$(".bind-jquery-event-here-class").bind("click", function() { var url = $(this)attr("href").val(); var content = $.load(url); alert(content); });
load函数不用于收集请求响应,此函数用于从远程文件加载HTML并将其注入DOM元素,例如:
$('a').bind('click', function(e) { var url = $(this).attr('href'); $('div#container').load(url); // load the html response into a DOM element e.preventDefault(); // stop the browser from following the link });
如果您处理锚元素的单击事件,则应阻止浏览器跟踪链接href。
另请注意,由于同源策略,只能使用相同的域来执行Ajax请求。
您的代码有几个问题:
1)您没有指定匿名函数的参数。 参数是事件(这里:点击)。 稍后您将需要此function来禁用点击的“正常”行为:
$("a.bind-jquery-event-here-class").bind("click", function(event) { event.preventDefault();
2)为了读取href,你不需要val()
。 ( val()
用于从输入字段中读取内容。)
var url = $(this).attr("href");
3)AJAX中的A代表异步。 对于你的代码,这意味着:load只是从服务器开始加载数据,但不会等到它完成。 你必须定义一个回调函数 ,它在最终到达时处理数据。
4)load用于执行AJAX调用并将结果插入DOM。 你不能用它作为警报。 如果您需要提醒,请使用$ .ajax。
5)您无法通过AJAX加载abitrary URL,您的AJAX调用只能返回到您自己的服务器。 如果你需要从其他服务器加载东西,你必须使用服务器端脚本作为代理。 这是你如何调用代理:
$.ajax({ type: "POST", url: "proxy.php", data: "url="+url, success: function(data){ alert("finally got data " + data); } });
这是php中的示例代理。
关于php的警告: file_get_contents
可能在您的服务器上被禁用。
这里是完整的javascript代码用于测试:
$(document).ready(function(){ $("a.bind-jquery-event-here-class").bind("click", function(event) { event.preventDefault(); var url = $(this).attr("href"); alert("loading via proxy: " + url); $.ajax({ type: "POST", url: "proxy.php", data: "url="+url, success: function(data){ alert("finally got data " + data); } }); }); });
如果你有一个带有这样一个href链接的整个菜单,你可以通过选择菜单容器div中的每个子元素来附加一个onclick事件来做到这一点
$('#Menu >*').each(function(){
$(this).bind('click',function(e){
var el = e.target
if(el.nodeName ==="A"){
fireMenuLink(el.href);
}
return false;
});
});
您应该始终在jQuery中返回false以禁止标记的默认行为
function fireMenuLink(){
$("#container_element_ID").load(url,function(){
//Do something like hide the loader
$('loaderStatus').hide();
});
}
如果您想要开发一个支持服务器端的屏幕并且您希望在使用片段URL管理浏览器历史记录时动态加载屏幕内容,这会派上用场。 有许多库可用于跨浏览器使用片段URL管理屏幕内容。 无论是在jQuery还是其他方面。
希望这可以帮助
干杯:)