如何在Javascript中使用file_get_contents和json_decode

时间:2013-02-09 12:58:11

标签: javascript social-networking social

我正在尝试在Javascript中使用此PHP API。如何在Javascript中使用file_get_contents和json_decode?

PHP API代码

$content=@file_get_contents("http://doma.in/api/?url=http://www.google.com&api=APIKEY");
$url=json_decode($content,TRUE);//Decodes json into an array 

if(!$url["error"]){  // If there is no error
 echo $url["short"]; //Outputs the short url 
}else{  
 echo $url["msg"]; //Outputs the error message 
}

的Javascript

(function( $ ) {
  $(document).ready(function() { 
    var url = window.location.href;
    var host =  window.location.hostname;
    var title = $('title').text();
    title = escape(title);

    var twitter = 'http://twitter.com/home?status='+title+'%20'+url;
    var facebook = 'http://www.facebook.com/sharer.php?u='+url;

    var tbar = '<div id="sicons">';
    tbar += '<a href="'+twitter+'" id="twitter" title="Share on twitter">Twitter</a>';
    tbar += '<a href="'+facebook+'" id="facebook" title="Share on Facebook">Facebook</a>';
    tbar += '</div>';

  });
})(jQuery);

编辑:感谢回复

data.php

$content = @file_get_contents('http://doma.in/api.php?api=asd4sdf5634d&url=' . urlencode('http://' . $_SERVER['HTTP_HOST']  . $_SERVER['REQUEST_URI']));
echo $content;

我已将此添加到Javascript的顶部

$.getJSON('data.php', function(data) {
    if(!data.error){ // If there is no error
    alert(data.short) //Outputs the short url
    }else{
    alert(data.msg)
    }
});

Javascript现在看起来像这样

(function( $ ) {
  $(document).ready(function() { 
    var shorturl = data.short;
    var title = $('title').text();
    title = escape(title);

    var twitter = 'http://twitter.com/home?status='+title+'%20'+url;
    var facebook = 'http://www.facebook.com/sharer.php?u='+url;

    var tbar = '<div id="sicons">';
    tbar += '<a href="'+twitter+'" id="twitter" title="Share on twitter">Twitter</a>';
    tbar += '<a href="'+facebook+'" id="facebook" title="Share on Facebook">Facebook</a>';
    tbar += '</div>';

  });
})(jQuery);

我确信我做错了什么。对不起,我是Coding(C,C ++)的初学者

1 个答案:

答案 0 :(得分:0)

通过AJAX加载数据异步。您的第一次调用($.getJSON)在加载页面后立即执行,但您作为参数传递的回调函数仅在基础HTTP请求完成后立即执行。这意味着您的程序不会阻止等待HTTP请求;在调用$.getJSON(...)之后运行程序,并在HTTP请求完成时调用回调方法。

一旦页面加载,您就会评估您的数据(在第二个函数中)。但是,由于您的数据是异步加载的,因此在呈现文档并执行您的函数时它尚未加载。

问题的解决方案是将评估数据的代码移动到$.getJSON(...)的回调函数中:

$.getJSON('data.php', function(data) {
    if (!data.error) {
        // Process your data here!
    } else {
        alert(data.msg)
    }
});