【问题标题】:How to parse JSON in PHP and pass it to Javascript?如何在 PHP 中解析 JSON 并将其传递给 Javascript?
【发布时间】:2017-11-13 04:09:15
【问题描述】:

这是我的目标:使用 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?

【问题讨论】:

  • 最佳实践是从一开始就在 JavaScript 中处理 JSON 对象。有很多方法,但它们很老套,你总会发现需要像这样解决的错误。
  • @Z.Bagley 我明白了,但是用 PHP 做呢?我宁愿有一种更简洁、更复杂的方法,也不愿破解一种简单的更混乱的方法。
  • @TimAkgayev 在$.ajax 设置中明确指定dataType: 'json'。这将确保success 函数中的responce 将是一个JavaScript 对象。

标签: javascript php jquery json twitter


【解决方案1】:

所以经过一些试验和错误后,我得到了它的工作。 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'”。

【讨论】:

    猜你喜欢
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    • 2016-04-05
    • 1970-01-01
    • 2021-02-22
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    相关资源
    最近更新 更多