【发布时间】:2011-09-05 14:20:13
【问题描述】:
我目前正在使用 Appcelerator 的 Titanium 编写一个 iPhone 应用程序。该应用的要求之一是能够检索最近播放的歌曲的 JSON 数组,并将其显示在 tableView 中。
我在应用程序中有一个单独的选项卡,可以毫无问题地从 twitter 解析 JSON,但是无论我做什么,我都无法让 appcelerator 解析我生成的 json。
JSON 是由位于我服务器上的 PHP 文件使用 json_encode(); 生成的;
这是我的 json:
[
{
"title": "Cramp Pres. Sliders - Meteor"
},
{
"title": "Progressiver pres. FineSky - Fine Sky"
},
{
"title": "Armin Van Buuren #x26; DJ Shah feat. Chris Jones - Going Wrong (Alex M.O.R.P.H #x26; Woody Van Eyden Remix)"
},
{
"title": "Bart Claessen - Hartseer"
},
{
"title": "Will Holland feat. Jeza - Start Again (Juventa Remix)"
}
]
为了确定,我已经用大量 JSON 验证器检查了这一点,它确实有效。
这是我的 JS:
var loader = Ti.Network.createHTTPClient();
loader.setTimeout(10000);
loader.open("GET","http://myurl.com/service/played.json");
loader.onload = function()
{
// Ti.API.info writes information to the debug console.
Titanium.API.info('Loaded! Status: ' + this.status);
Titanium.API.info('Response Header: ' + this.getResponseHeader('Content-Type'));
Titanium.API.info('Response Text: ' + this.responseText);
}
loader.send();
在应用程序中,responseText 只是简单地返回为 [] - 就是这样。没有其他的。我检查了我的 JSON 结构和 twitter API 返回的 JSON,两者的布局似乎几乎相同,只有 twitter API 返回了更多信息,如您所想。
以下是我尝试过的步骤:
我将 PHP 生成的 JSON 保存到一个名为“test.json”的文本文件中并尝试解析它。这很好!
以前我编写的 Web 服务需要一个 ?action=played 查询字符串。我删除了它以确保我确实在检索 JSON 数组。这没什么区别
我已经在 PHP 中发送了 text/plain 和 application/json 的标头,但无济于事
最后,我在我的服务器上使用了 mod_rewrite,因此我可以将 Web 服务的输出作为 json 文件提供。即play.json -- 仍然是一个空数组。
我只是觉得我的头反复撞在砖墙上,希望一些压力较小的人提供一些见解:)
任何帮助将不胜感激!
亲切的问候,
戴夫
更多信息: 我通过检查 http 标头发现返回的内容长度始终为 2。但是,在浏览器中查看页面或生成的 .json 文件会显示完整的 JSON 数组。
正如之前所怀疑的,现在这似乎归结为与 PHP 相关的问题。脚本的工作方式很简单。它查询 MySQL 表以检索歌曲列表。当它遍历数组时,它会填充一个名为 $songs 的数组
在函数的最后,我简单地使用:
echo json_encode($songs);
更多信息 如果我删除内容类型标题并在浏览器中查看页面,我会收到 JSON 数组。如果我然后将其复制并粘贴到我的 PHP 文件的末尾,在结束标记之后,我粘贴的数据是显示出来。
【问题讨论】:
标签: php javascript json titanium appcelerator