Php JSON数组使用appcelerator/titanium返回空

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

我正在用Appcelerator的钛合金编写一个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和TwitterAPI返回的JSON的结构,两者的布局似乎基本相同,只是TwitterAPI返回了更多的信息,正如您所想象的

以下是我尝试过的步骤:

  • 我将PHP生成的JSON保存到一个名为“test.JSON”的文本文件中,并尝试对其进行解析。。这很有效

  • 以前,我编写的web服务需要一个?action=played查询字符串。我删除它是为了确保我确实是在检索JSON数组。这没什么区别

  • 我已经用PHP发送了text/plain和application/json的标题,但都没有用

  • 最后,我在我的服务器上使用了mod_rewrite,因此我可以将web服务的输出作为json文件提供。。即played.json——仍然是一个空数组

  • 我只是觉得我在不断地把头撞在砖墙上,希望能从压力较小的人那里得到一些启示:)

    任何帮助都将不胜感激

    亲切问候,

    戴夫

    更多信息: 通过检查http头,我发现返回的内容长度始终为2。但是,在浏览器中查看页面或生成的.json文件会显示完整的json数组

    正如之前所怀疑的那样,现在这似乎归结为一个与PHP相关的问题。脚本的工作方式很简单。它查询MySQL表以检索歌曲列表。当它在数组中循环时,它填充一个名为$songs的数组

    在函数末尾,我只使用:

    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..它工作了

    谢谢你们投入的时间,真的很感激

    戴夫

    嗨,布莱恩,比