Php JSON数组使用appcelerator/titanium返回空
我正在用Appcelerator的钛合金编写一个iPhone应用程序。该应用程序的一个要求是能够检索最近播放的歌曲的JSON数组,并将其显示在tableView中 我在应用程序中有一个单独的选项卡,可以毫无问题地解析来自twitter的JSON,但是无论我做什么,我都无法让appcelerator解析我生成的JSON JSON是由位于我的服务器上的PHP文件使用JSON_encode()生成的 这是我的json:Php JSON数组使用appcelerator/titanium返回空,php,javascript,json,titanium,appcelerator,Php,Javascript,Json,Titanium,Appcelerator,我正在用Appcelerator的钛合金编写一个iPhone应用程序。该应用程序的一个要求是能够检索最近播放的歌曲的JSON数组,并将其显示在tableView中 我在应用程序中有一个单独的选项卡,可以毫无问题地解析来自twitter的JSON,但是无论我做什么,我都无法让appcelerator解析我生成的JSON JSON是由位于我的服务器上的PHP文件使用JSON_encode()生成的 这是我的json: [ { "title": "Cramp Pres. Sli
[
{
"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和TwitterAPI返回的JSON的结构,两者的布局似乎基本相同,只是TwitterAPI返回了更多的信息,正如您所想象的
以下是我尝试过的步骤:
echo json_encode($songs);
更多信息
如果我删除内容类型标题并在浏览器中查看页面,我将收到JSON数组。。如果我将其复制并粘贴到PHP文件的末尾,在结束标记之后,将显示我粘贴的数据。根据需要,您只需稍微切换一下顺序
onload—“在调用open之前,将其设置为函数,以便在成功响应时调用该函数”
Appcelerator Tianium有很多隐藏的障碍:-(根据需要,您只需稍微切换一下订单即可
onload—“在调用open之前,将其设置为函数,以便在成功响应时调用该函数”
Appcelerator Titanium有很多隐藏的障碍:-(试试下面的代码,这正是我正在使用的
var xhr = Titanium.Network.createHTTPClient();
xhr.onload = function () {
try {
var returned = JSON.parse(this.responseText);
} catch (e) {
Ti.API.debug("Unable to parse JSON from: "+url);
}
Ti.API.debug(returned);
};
xhr.open("GET", url, false);
xhr.send();
另外,请确保您使用的是最新的Ti SDK 1.6.2。我在早期版本中遇到了类似的问题。在运行此代码之前(但在添加此代码之后),请删除build文件夹以强制Ti完全重建项目。请尝试下面的代码,这正是我正在使用的代码
var xhr = Titanium.Network.createHTTPClient();
xhr.onload = function () {
try {
var returned = JSON.parse(this.responseText);
} catch (e) {
Ti.API.debug("Unable to parse JSON from: "+url);
}
Ti.API.debug(returned);
};
xhr.open("GET", url, false);
xhr.send();
另外,请确保您使用的是最新的Ti SDK 1.6.2。我在早期版本中遇到了类似的问题。在运行此代码之前(但在添加代码之后),请删除build文件夹,以强制Ti完全重建项目。我建议进行一些更改,这些更改可能会提供一些额外的见解 此代码
loader.setTimeout(10000);
应该是这个吗
loader.setTimeout([10000]);
我还将向httpClient添加一个错误处理程序,以查看是否还有其他有趣的数据从服务器返回
loader.onerror = function(e) {
Ti.API.error(e);
}
我建议进行一些更改,以提供一些额外的见解 此代码
loader.setTimeout(10000);
应该是这个吗
loader.setTimeout([10000]);
我还将向httpClient添加一个错误处理程序,以查看是否还有其他有趣的数据从服务器返回
loader.onerror = function(e) {
Ti.API.error(e);
}
谢谢大家的回答 我进一步调查发现,问题似乎在于我的PHP脚本创建JSON数组的方式 虽然JSON经过验证,并且在浏览器和生成的.JSON文件中都可见,但由于某种原因,它没有被创建?真奇怪,我仍然无法理解它 然而,我认为问题可能在于我解析提供歌曲信息的XML提要的方式。有趣的是,它确实存在。我以前在我的网站上使用的代码工作得很好,但appcelerator一点也不喜欢它 因此,我获取了XML提要并通过simplexml\u load\u string()运行它,并且能够直接在php的json\u encode()函数中使用它。BAM..它工作了 谢谢你们投入的时间,真的很感激
戴夫谢谢大家的回答 我进一步调查发现,问题似乎在于我的PHP脚本创建JSON数组的方式 虽然JSON经过验证,并且在浏览器和生成的.JSON文件中都可见,但由于某种原因,它没有被创建?真奇怪,我仍然无法理解它 然而,我认为问题可能在于我解析提供歌曲信息的XML提要的方式。有趣的是,它确实存在。我以前在我的网站上使用的代码工作得很好,但appcelerator一点也不喜欢它 因此,我获取了XML提要并通过simplexml\u load\u string()运行它,并且能够直接在php的json\u encode()函数中使用它。BAM..它工作了 谢谢你们投入的时间,真的很感激 戴夫嗨,布莱恩,比