【发布时间】: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