繁体   English   中英

我向Twitter API提出了请求。 如何从PHP脚本获得对JavaScript的JSON响应?

[英]I made a request to the Twitter API. How can I get the JSON response from my PHP script to my JavaScript?

我正在执行一个Twitter API请求,该请求返回包含#awkward的所有tweet的JSON。 这是服务器上的成功响应: http : //babbage.cs.missouri.edu/~atgvyc/php/election_tweets/index.php

但是我希望能够在我的JavaScript中使用该JSON,并使用for循环解析该JSON,以提取某些信息(尤其是地理标记和位置)。 我以为我可以先使用AJAX然后再使用JSON.parse来完成此操作,但是它没有按照我认为的方式工作。

有什么建议么?

这是我的PHP脚本:

<?php
require_once('TwitterAPIExchange.php');

$settings = array(
'oauth_access_token' => "XXX",
'oauth_access_token_secret' => "XXX",
'consumer_key' => "XXX",
'consumer_secret' => "XXX"
);

$url = 'https://api.twitter.com/1.1/search/tweets.json';
$getfield = '?q=#awkward&geocode=38.949926,-92.330037,35mi&result_type=recent';
$requestMethod = 'GET';

$twitter = new TwitterAPIExchange($settings);
echo $twitter->setGetfield($getfield)
         ->buildOauth($url, $requestMethod)
         ->performRequest();
?>  

这是我的HTML:

<!DOCTYPE html>
<html>
<head>
    <title>Sample elections tweets</title>

    <script>
    function loadXMLDoc()
    {
        var xmlhttp;

        if (window.XMLHttpRequest)
        {// code for IE7+, Firefox, Chrome, Opera, Safari
          xmlhttp=new XMLHttpRequest();
        }

        else
        {// code for IE6, IE5
          xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }

        xmlhttp.onreadystatechange=function()
        {
            if (xmlhttp.readyState==4 && xmlhttp.status==200)
            {   
                var json = JSON.parse(xmlhttp.responseText);

                //here's where i'd like to put a for-loop
            }
        }

        xmlhttp.open("GET","index.php",true);
        xmlhttp.send(); 
    }
    </script>
</head>
<body>
    <h2>AJAX</h2>
    <button type="button" onclick="loadXMLDoc()">Request data</button>
<body>

好的,我想我知道您现在想做什么。 确实没有像php中那样“开箱即用”,这就是为什么许多框架都在其中实现自己的(jQuery的$ .each())或制作原型的原因。 但是,您可能可以通过以下方式完成您需要的工作。 您可以根据需要将所有console.log()替换为alert(),但是如果不在Chrome的开发工具中(大多数计算机上为f12),它就会变得很忙。 另外,如果戴尔·穆瑟(Dale Musser)还在那儿,告诉他你好! MIZ

function loadXMLDoc()
{
    var xmlhttp;

    if (window.XMLHttpRequest)
    {// code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp=new XMLHttpRequest();
    }

    else
    {// code for IE6, IE5
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }

    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {   
            var json = JSON.parse(xmlhttp.responseText);

            //log entire json struct to developer console for easy viewing
            console.log(json);

            //you can reference individual pieces of json by doing something like
            //json.statuses or json.statuses[2]
            var statuses = json.statuses;

            for(var i=0;i<statuses.length;i++){
                var curStatus = statuses[i];

                //access bits directly
                var tweetAuthor = curStatus.user.name;
                var tweetTime = curStatus.created_at;

                //iterate hashtags
                var hashtags = curStatus.entities.hashtags;
                for(var k=0;k<hashtags.length;k++){
                        console.log("Hashtag: " + hashtags[k].text);
                }

                //iterate all elements of tweet
                for(var key in curStatus){

                    var attrName = key;
                    var attrValue = curStatus[key];

                    console.log("attribute name: " + attrName);
                    console.log("attribute key: " + attrValue);
                    if(attrName = "text") {
                        //Do something with tweet texts... like: 
                        //document.getElementById("statuses").appendChild(attrValue);
                    }
                }
            }

        }
    }

    xmlhttp.open("GET","index.php",true);
    xmlhttp.send(); 
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM