如何在PHP中解析JSON并将其传递给Javascript?

时间:2017-06-11 17:21:18

标签: javascript php jquery json twitter

这是我的目标:使用twitter api用最近的推文填充一些幻灯片,而无需重新加载页面。

我现在拥有它的方式是:我每隔几秒就从我的页面上的javascript到php页面进行ajax调用。 php页面设置并验证与Twitter的连接并获得JSON格式的响应。现在这是我的问题,JSON响应我得到的都是混合和匹配一些是数组,一些是stdClass对象。理想情况下,我想将此JSON直接传递给Javascript作为对象,因此在Javascript中我可以执行类似这样的操作,jsonresponce-> statuses-> text。

在此牢记这一点与我所描述的结构相同,但在代码中:

前端 - >

// JavaScript Document

function AJAXToTwitter(){
console.log("making ajax call");
$.ajax({
    url: '../php/twiter-stream.php',
    type: 'GET',
    success: function(responce) {
        $.each(responce, function(i, obj){
            $(".LiveSlide1 .text").html(obj.text);
        });

        console.log("ajax call successful");
    },
    error: function(errors) {
      console.log("ajax call failed");
    }

})
}

$(document).ready(AJAXToTwitter);

后端 - >

//PHP Document

<?php
require "../vendor/autoload.php";
use Abraham\TwitterOAuth\TwitterOAuth;

$consumerKey = "iNol________________n5uVZcAB";
$consumerSecret = "o_______________________l1_J";
$accessToken = "142480736-jlOVy___________________________________tm5b7ZN";
$accessTokenSecret = "K___________________________________________wF__V";

function getToken( $apiKey, $apiKeySecret, $axToken, $axTokenSecret ) {
    $connection = new TwitterOAuth( $apiKey, $apiKeySecret, $axToken, $axTokenSecret );
return $connection;
}

$connection = getToken($consumerKey, $consumerSecret, $accessToken, 
$accessTokenSecret);

$urlQuery = "#WebDesign";
$search = $connection->get("search/tweets", ["q" => $urlQuery]);



echo (json_encode($search));

?>

这里的问题是我认为在搜索/推文查询的情况下的响应是一个类,所以json_encode产生一个字符串,我无法使用$ .each函数。 Chrome开发工具控制台中的确切错误是

 Uncaught TypeError: Cannot use 'in' operator to search for '70806' in 
 {"statuses":[{"created_at":"Sun Jun 11 17:15:40 +0000 .......

然后继续吐出我编码的整个json字符串。

我的问题是在处理这样的API时,一般处理JSON的正确方法是什么,我应该避免使用PHP并从JavaScript直接调用吗?我应该手动提取每个响应并将其编码为较小的手工制作的json吗?或者有没有办法将未修改的响应传递回javascript?

1 个答案:

答案 0 :(得分:0)

经过一些试验和错误,我得到了它的工作。 PHP文件是相同的,在JavaScript中我必须这样做:

$.ajax({
    url: '../php/twiter-stream.php',
    type: 'GET',
    success: function(responce) {

        //added this line to parse the json string into JS object
        var parsedJSON = JSON.parse(responce);

        //now just iterating over the object to extract the info
        $.each(parsedJSON.statuses, function(i, obj) {

            var slideIndex = (i + 1) % 7;
             $(".LiveSlide" + slideIndex+ " .text").html(obj.text);
             $(".LiveSlide" + slideIndex+ " .Date").html(obj.created_at);
        });


        console.log("ajax call successful");
    },
    error: function(errors) {
      console.log("ajax call failed");
    }

})

这是我认为它的工作方式,在PHP内部,TwitterOAuth :: get()函数从Twitter服务器检索JSON字符串,将其编码为类。为了将它传递给javascript,我需要将该类转换回字符串,这是通过json_encode()完成的。然后在javascript中我们使用JSON.parse()将其转换回对象,就像我在这里做的那样,或者你也可以在@Joe Black建议的jQuery ajax调用中指定“dataType:'json'”。