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还是其他方面。

希望这可以帮助
干杯:)