Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Tianium Appcelerator使用API解析Youtube JSON_Javascript_Json_Youtube Api_Titanium_Appcelerator - Fatal编程技术网

Javascript Tianium Appcelerator使用API解析Youtube JSON

Javascript Tianium Appcelerator使用API解析Youtube JSON,javascript,json,youtube-api,titanium,appcelerator,Javascript,Json,Youtube Api,Titanium,Appcelerator,我在论坛上做了一个调查,结果弄糊涂了。我的演示项目是用Alloy MVC创建的。我想解析一个来自Youtube API的JSON,其中包含烹饪的顶级相关视频,并在TableView中显示它们。 有人能告诉我怎么做吗? 我是新来的 这是我迄今为止所做的代码: 视频XML <Alloy> <Window class="container"> <View id="main" onClick="youtubeFeed"> <Label class="hea

我在论坛上做了一个调查,结果弄糊涂了。我的演示项目是用Alloy MVC创建的。我想解析一个来自Youtube API的JSON,其中包含烹饪的顶级相关视频,并在TableView中显示它们。 有人能告诉我怎么做吗? 我是新来的

这是我迄今为止所做的代码:

视频XML

<Alloy>
<Window class="container">
<View id="main" onClick="youtubeFeed">
   <Label class="header">YouTube Channel</Label>
            <TableView id="results">

            </TableView>            
        </View>
    </Window>
</Alloy>

您需要在xhr的帮助下调用实际的API url。首先,请看一看

在projectname/app/folder中创建一个lib文件夹,并将js文件放在那里,然后在yor函数中这样调用它:

require("/api").create({
    url: query,
    type: "GET",
    success: onSuccess,
    error: onError
});

function onSuccess(e){
    console.log(e.data);
}

function onError(e){
    console.log("error");
}

并确保您的查询字符串是正确的。看起来您使用了一个php示例,因为它使用了$和a。最后是连接。

我不确定您使用什么库来获取JSON,但是在您获取JSON之前解析JSON是不起作用的

这是它应该如何工作的一个基本示例:

var url = 'https://www.googleapis.com/youtube/v3/search?part=snippet&q=search&maxResults=per_page&videoCategoryId=category&safesearch=strict&key=apikey';
var xhr = Titanium.Network.createHTTPClient({
    onload: function() {
        var response = JSON.parse(this.responseData);
        // you've got your JSON here, after the API call succeeded
    },
    timeout: timeout
});
xhr.open('GET', url);
xhr.send();

既然MigaRene给了您提示,您已经从Youtube API获得了JSON答案。
您可能想阅读一些内容,以了解从Youtube返回时JSON对象的外观(使用他们的API资源管理器)

阅读文档时,您应该为
响应中的每个元素添加一个
TableViewRow
。项

for (var i=0; i<response.items.length; i++){
    var video, row, videoTitle;

    video = response.items[i];

    row = Ti.UI.createTableViewRow({
        width: Ti.UI.FILL,
        height: 100
    }),

    videoTitle = Ti.UI.createLabel({
        text: video.snippet.title,
        videoId: video.id.videoId, // custom prop
        width: Ti.UI.SIZE,
        height: 80
    });
    row.add(videoTitle);

    $.results.appendRow(row);
}

祝你好运

非常感谢您的快速回复。我还修改了您提到的查询字符串,因为我使用了一个php示例。不幸的是,我没有让它工作。如果你告诉我们错误是什么,或者你从哪里得到了Stuck,这会有所帮助。我没有错误,但当我在emulator上运行它时,什么都没有出现。对不起,我问了个愚蠢的问题。我是否需要其他东西来将JSON解析为XML中的TableView?仍然缺少很多东西。看一看有一些代码如何创建tableviewrows以及如何添加它们。您应该在输出控制台中看到api响应的内容,以检查api调用是否正常工作
for (var i=0; i<response.items.length; i++){
    var video, row, videoTitle;

    video = response.items[i];

    row = Ti.UI.createTableViewRow({
        width: Ti.UI.FILL,
        height: 100
    }),

    videoTitle = Ti.UI.createLabel({
        text: video.snippet.title,
        videoId: video.id.videoId, // custom prop
        width: Ti.UI.SIZE,
        height: 80
    });
    row.add(videoTitle);

    $.results.appendRow(row);
}
$.results.addEventListener('click', function onClick(event) {
    var row = event.row,
        videoId = row.videoId;
    // TODO...
});