我正在创建一个从网址
返回元标记的链接共享所以,我创建了一个名为 getmeta.php 的页面,并将所有信息放入一个数组中,最后用json编码
$url = $_GET['link'];
if(!empty($url)) {
function file_get_contents_curl($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
$html = file_get_contents_curl($url);
$doc = new DOMDocument();
@$doc->loadHTML($html);
$nodes = $doc->getElementsByTagName('title');
$title = $nodes->item(0)->nodeValue;
$metas = $doc->getElementsByTagName('meta');
for ($i = 0; $i < $metas->length; $i++)
{
$meta = $metas->item($i);
if($meta->getAttribute('name') == 'description')
$description = $meta->getAttribute('content');
if($meta->getAttribute('property') == 'og:image')
$thumb = $meta->getAttribute('content');
}
$page = preg_replace( '/(http|ftp)+(s)?:(\/\/)((\w|\.)+)(\/)?(\S+)?/i', '$4', $url );
$arr = array('title' => $title, 'thumb' => $thumb, 'page' => $page, 'url' => $url);
echo json_encode($arr);
}
我使用$ .get方法在ajax中进行回调,如此
function getThumb(url) {
$.get( 'getmeta.php', { link : encodeURI(url) } , function( data ) {
var title = data[0].title;
var page = data[0].page;
var thumb = data[0].thumb;
thumb_image.css({"background-image":"url("+thumb+")"});
thumb_title.html('<span>' + title + '</span><span><i class="fa fa-link"></i>'+page+'</span>');
}, "json" );
}
现在,代码似乎是正确的,但每次都会返回空调。我只是无法弄清楚我错在哪里。有任何想法吗 ?
答案 0 :(得分:0)
$arr = array('title' => "title", 'thumb' => "thumb", 'page' => "page", 'url' => "url");
echo json_encode($arr);
OUTPUT: {"title":"title","thumb":"thumb","page":"page","url":"url"}
因此data[0]
未定义,您可能在控制台中看到错误。如果这确实是您问题的根源,可以通过在JS中删除[0]
三个变量来轻松修复。
正如@ArunPJohny在评论中提到的那样,你应该开始使用console.log
来帮助你调试这些问题。
您的代码可能遇到的另一个问题是,$.get
回调函数data
实际上是一个字符串。这需要在某些时候解析为JSON,或者您只需使用$.getJSON
代替。