使用 json 回调进行链接共享

Link sharing with json callback

本文关键字:链接 共享 json 回调 使用      更新时间:2023-09-26

我正在创建一个从 url 返回元标记的链接共享

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

我在 ajax 中使用 $.get 方法进行回调,如下所示

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" );
}

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

$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