dream518518518
dream518518518
2013-04-12 09:37

使用JSONP的PHP Twitter请求

I have created a simple PHP Twitter request that caches the response every 10 minutes. The request code looks like:

$twitter_result = false;

if (file_exists( 'twitter.json' )) {
    $data = json_decode( file_get_contents( 'twitter.json' ));
    if ($data->timestamp > (time() - 10 * 60) ) {
        $twitter_result = $data->twitter_result;
    }
}

if (!$twitter_result) {
    $twitter_result = file_get_contents('http://api.twitter.com/1/statuses/user_timeline.json?q=@SolidCAMUK&rpp=1&screen_name=SolidCAMUK&count=1');
    $data = array ('twitter_result' => $twitter_result, 'timestamp' => time());
    if(file_put_contents( 'twitter.json', json_encode($data) )) {
        //echo 'success';
    } else {
        //echo 'error';
    }
}

$file = file_get_contents('twitter.json');

header("content-type:application/json");
if($_GET['callback']) {
    echo $_GET['callback'] . '(' . $file . ')';
} else {
    echo $file;
}
exit;

And an example of the returned JSONP for this page looks like: http://dev.driz.co.uk/phptwitter/?callback=Test

And then I'm trying to use this JSONP in my test scenario here: http://dev.driz.co.uk/phptwitter/test.php

However the data isn't being displayed properly. I'm guessing that the JSON isn't formatted correctly, as when I console.log the response, it seems to be acting as a string rather than an actual object... Can anyone see any issues?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

1条回答

  • doulianqi3870 doulianqi3870 8年前

    There is nothing wrong with the returned JSON format. It is valid and you can check it here.

    You are doing console.log(response.twitter_result); and that's why you see plain text. If you do console.log(response); you will see the actual returned object.

    The response.twitter_result is an object also but you have to parse it first like this

    success: function(response){
                    var twitter_result = $.parseJSON(response.twitter_result);
    
                    console.log(twitter_result[0].text);
                   //and here you can apply your parseTwitterText() function as you wish
    }
    
    点赞 评论 复制链接分享