假设我做了一个简单的
AJAX请求(在jQuery中),比如geturl.PHP?url = http://google.com
和geturl.PHP是这样的:
<?PHP if($_GET['url']) { $url=$_GET['url']; echo file_get_contents($url); } ?>
简单吧?
我如何从jQuery中返回的(非常长的)字符串中获取Meta描述?
这是我到目前为止所拥有的.是的,我知道,desc是错的.
$.get("geturl.PHP?url="+url,function(response) { // Loading <title></title>data var title=(/<title>(.*?)<\/title>/m).exec(response)[1]; var desc = $("Meta[name=description]").val(); $("#linkBox").html("<div><b>"+title+"</b><br/>"+url+"<br />Desc: " + desc) });
解决方法
使用正则表达式解析HTML是
bad practice.
令人讨厌的是,jQuery不支持解析头部中的元素,只支持正文.所以直接用JS代替:
window.onload = function(){ $.ajax({ type: 'GET',url: '/',dataType: 'html',success: function(data) { //cross platform xml object creation from w3schools try //Internet Explorer { xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); xmlDoc.async="false"; xmlDoc.loadXML(data); } catch(e) { try // Firefox,Mozilla,Opera,etc. { parser=new DOMParser(); xmlDoc=parser.parseFromString(data,"text/xml"); } catch(e) { alert(e.message); return; } } var Metas = xmlDoc.getElementsByTagName("Meta"); for (var i = 0; i < Metas.length; i++) { if (Metas[i].getAttribute("name") == "description") { alert(Metas[i].getAttribute("content") || Metas[i].getAttribute("edit")); } } } }); }
从David Burrows开始无耻地撕掉.谢谢,大卫!