如何通过jQuery load()访问发送到div的URL参数
问题的出现原因是,由于"子页面"只是通过AJAX作为字符串插入到父页面中,并没有自己的DOM和脚本上下文,因此它没有自己的window.location。所有内容都添加到父页面的DOM中,并且脚本在父页面的上下文中执行。
解决方法是,如果要在父页面和使用load加载的新脚本之间共享变量,可以将变量附加到window对象上,然后在"子页面"的脚本中访问它。
例如:
// 父页面 window.sharedVariable = "Hello World!"; $('#partial').load(url); // 子页面 var v = window.sharedVariable;
[工作示例](http://jsfiddle.net/alan0xd7/L9kumjmo/) ([子页面](https://gist.githubusercontent.com/alan0xd7/ed60a93559c60d6bfdaa/raw/51dd18a0069003674864142c50806722fd9f6ae5/abc.html))
更新:
这里是另一种支持多个部分页面的方法,使用数据属性来共享变量。
// 父页面 $('#partial_1').load(url).data("param", "111"); $('#partial_2').load(url).data("param", "222"); $('#partial_3').load(url).data("param", "333"); // 子页面 var scriptTag = document.scripts[document.scripts.length - 1]; var parentTag = scriptTag.parentNode; var param = $(parentTag).data("param");
基本上,我们将要共享的数据设置在部分页面的div中。然后在"子页面"中,我们找到当前正在运行的脚本标签,然后父标签就是包含数据的div。
[工作示例](http://jsfiddle.net/alan0xd7/L9kumjmo/4/) ([子页面](https://gist.githubusercontent.com/alan0xd7/ed60a93559c60d6bfdaa/raw/a728e6d54af0063909258548ccfeed20cac9480d/abc.html))
这个答案似乎没有解决原帖中描述的"URL参数"问题?
直接的答案是,"无法实现",因为没有"子页面",它们都只是同一个页面的一部分。
在应用程序的其他区域中使用了您建议的方法,其中页面之间要共享的数据是静态的并且预先知道的。但在这种情况下,部分div的数量只在运行时才会知道:parent_page.html有以下js
child_page.html需要加载到parent_page.html中的多个div中。在child_page.html中,想要通过load发送的键值对访问键值。
是的。解决方案应该在load的complete回调中返回传递给.load()的参数。如果传递给.load()的参数发生了更改,那么在每次调用.load()时应该可以访问这些更改后的参数。
我提供了一种支持多个部分页面的替代方法,请参考一下。
使用数据对象传输参数的解决方案对我很有效。谢谢。
谢谢。这个解决方案对我有效。
问题出现的原因是想要通过jQuery的load()方法访问通过URL参数传递给div的内容。使用load()方法加载页面时,无法直接获取URL参数。
解决方法是使用HTML5的History API,通过替换URL的方式将参数添加到URL中,然后在加载的页面中通过window.location.search获取参数,并解析查询字符串。
具体实现代码如下:
history.replaceState(null, null, '?key=1'); var test = $('#partial').load('two.html');
然后在two.html页面中,可以通过window.location.search获取到?key=1这个参数,并进行解析。
这种方法简单且不需要对加载的页面进行任何代码编辑,因此是解决这个问题的最佳方法。
问题的出现的原因是需要在通过jQuery的load()方法加载的div中访问URL参数。解决方法是使用beforeSend来设置jqxhr对象的settings url,并在.load()的complete回调函数中访问jqxhr对象。
具体的解决方法如下所示:
var url = "https://gist.githubusercontent.com/anonymous/4e9213856be834b88f90/raw/1d90ab5df79e6ee081db2ff8b94806ef27cbd422/abc.html"; $.ajaxSetup({ beforeSend: function(jqxhr, settings) { jqxhr.params = settings.url } }); function loadComplete(data, textStatus, jqxhr) { $(this).find("h1") .html(function(_, html) { return html + " My param is " + jqxhr.params.split("?")[1] }); }; $("#partial_1").load(url + "?111", loadComplete); $("#partial_2").load(url + "?222", loadComplete); $("#partial_3").load(url).load(url + "?333", loadComplete);
在上述代码中,通过beforeSend设置了jqxhr对象的params属性,然后在loadComplete回调函数中通过jqxhr对象访问了URL参数。
同时,上述代码中还包含了一个示例的HTML代码,其中有三个div标签(id为partial_1、partial_2和partial_3),分别通过.load()方法加载了同一个URL的内容,并在加载完成后调用了loadComplete回调函数。
通过上述方法,可以在通过.load()方法加载的div中访问URL参数。