解決關於jquery中$.get()方法總是報“HierarchyRequestError: Node cannot be inserted at the specified point in the hierarchy”錯的方法
今天在看《jquery基礎教程(第三版)》第十章的時候,運行隨書下載的源碼時總是不成功。起初以為書中自帶的JS文件有錯呢,但是測來測去也沒發現哪里有問題。現在把源碼附下:
1、這是書中帶的HTML文件,其余的忽略不計,關鍵的就是下面這個a。
<a id="more-photos" href="pages/1.html">More Photos</a>
2、對應的JS文件如下(注意其中關鍵方法為$.get()):
1 $(document).ready(function() { 2 var pageNum = 1; 3 $('#more-photos').click(function() { 4 var $link = $(this); 5 var url = $link.attr('href'); 6 if (url) { 7 $.get(url, function(data) { 8 $('#gallery').append(data); 9 }); 10 pageNum++; 11 if (pageNum < 20) { 12 $link.attr('href', 'pages/' + pageNum + '.html'); 13 } 14 else { 15 $link.remove(); 16 } 17 } 18 return false; 19 }); 20 });
3、錯誤。以上看起來似乎沒有問題,但是在火狐和Chrome下測試都報錯,其中火狐debug錯誤如下:
整個一章的代碼都是這樣,但是測試在IE里沒有問題。於是谷歌、百度各種亂搜一翻,貌似網上發生這樣問題的還不在少數,但是搜來搜去各種回答都 有。一一試了下,發現其中的以為大哥的方法貌似正確,於是查了下jquery api,原來是問題出在$.get()方法上,書中的源碼在使用這個方法的時候都沒有指定這個方法的type參數,即jQuery.get(url, [data], [callback], [type])第四個參數。加上第四個參數‘html’以后就顯示正常了。Okay了!灰常happy!現在運行OK了,已經沒有錯誤了。
具體方法如下:
在上面的JS文件中的第7行$.get()方法上增加一個type參數即可,如下(注意第9行增加了一個‘html’的type參數):
1 $(document).ready(function() { 2 var pageNum = 1; 3 $('#more-photos').click(function() { 4 var $link = $(this); 5 var url = $link.attr('href'); 6 if (url) { 7 $.get(url, function(data) { 8 $('#gallery').append(data); 9 },'html'); 10 pageNum++; 11 if (pageNum < 20) { 12 $link.attr('href', 'pages/' + pageNum + '.html'); 13 } 14 else { 15 $link.remove(); 16 } 17 } 18 return false; 19 }); 20 });
由於是新手,也只找到了怎么解決這個問題,但是沒有找到為什么會出現這樣的問題。以后使用$.ajax()\$.get()等這幾個方法的需要注意一下子了。
參考:http://blog.sina.com.cn/s/blog_995c1f630101a36l.html(這位大哥的錯誤發生在$.ajax()方法上)

