链接与json回调共享

时间:2013-10-31 00:49:10

标签: javascript php jquery json

我正在创建一个从网址

返回元标记的链接共享

所以,我创建了一个名为 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" );
}

现在,代码似乎是正确的,但每次都会返回空调。我只是无法弄清楚我错在哪里。有任何想法吗 ?

1 个答案:

答案 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代替。