简体   繁体   English

使用Appcelerator无法获取JSON文件以将其解析为JavaScript中的TableView

[英]Can't get JSON file to parse into TableView in JavaScript using Appcelerator

I'm trying to get a JSON file into a table in JavaScript using Appcelerator and I'm not quite sure why it is outputting as an empty table when compiling to an example page. 我正在尝试使用Appcelerator将JSON文件放入JavaScript的表中,但我不确定为什么在编译为示例页面时为什么将其输出为空表。 I'm rather new to dealing with both JavaScript and JSON formats, so if you see any silly logical or syntax mistakes, please go easy on me and also let me know how I can fix my issue: 我对JavaScript和JSON格式都比较陌生,因此,如果您发现任何愚蠢的逻辑或语法错误,请放轻松,并让我知道如何解决此问题:

// Set the background color with no windows or tabs
Titanium.UI.setBackgroundColor('#000');

// Create the window
var win1 = Titanium.UI.createWindow({  
    title:'Challenge Window',
    backgroundColor:'#fff',
});

// Store the image and its properties
    var image = Titanium.UI.createImageView({
    image: "https://myavantiservices.files.wordpress.com/2015/02/helloworld.gif",
    height: 380,
    width: 380,
    center: 512,
    top: -50
});

var tableData;

// Parse our JSON file using onload
var url = "https://www.sitepoint.com/twitter-json-example/";
var json;
var xhr = Ti.Network.createHTTPClient({
    onload: function() {
        json = JSON.parse(this.responseText);
        tableData = json;
    }
});

// Create the table and insert the JSON data
var table = Titanium.UI.createTableView({
    data: tableData,
    height: 480,
    width: 480,
    top: 256,
    left: 232
});

// Add the image to the window and open the window
win1.add(image);
win1.add(table);
win1.open();

The JSON returned by the url: 网址返回的JSON:

    {"results":[

     {"text":"@twitterapi  https://code.google.com/archive/p/twitter-api/issues/353",

     "to_user_id":396524,

     "to_user":"TwitterAPI",

     "from_user":"jkoum",

     "metadata":

     {

      "result_type":"popular",

      "recent_retweets": 109



     },

     "id":1478555574,   

     "from_user_id":1833773,

     "iso_language_code":"nl",

     "source":"twitter< /a>",

     "profile_image_url":"http://s3.amazonaws.com/twitter_production/profile_images/118412707/2522215727_a5f07da155_b_normal.jpg",

     "created_at":"Wed, 08 Apr 2009 19:22:10 +0000"},

     ... truncated ...],

     "since_id":0,

     "max_id":1480307926,

     "refresh_url":"?since_id=1480307926&q=%40twitterapi",

     "results_per_page":15,

     "next_page":"?page=2&max_id=1480307926&q=%40twitterapi",

     "completed_in":0.031704,

     "page":1,

     "query":"%40twitterapi"}

    }

You need to move everything that relies on the JSON response to be inside of the onload block. 您需要将所有依赖于JSON响应的内容移到onload块中。 Otherwise, the table will be constructed before tableData has any data. 否则,将在tableData具有任何数据之前构造表。 You also aren't actually sending the xhr . 您实际上也没有发送xhr

Once you get a URL that actually returns that JSON, you can use this: 一旦获得实际返回该JSON的URL,就可以使用以下代码:

var url = "https://www.sitepoint.com/twitter-json-example/";
var json;
var xhr = Ti.Network.createHTTPClient({
    onload: function() {
        json = JSON.parse(this.responseText);
        tableData = json;

        var table = Titanium.UI.createTableView({
            data: tableData,
            height: 480,
            width: 480,
            top: 256,
            left: 232
        });

        win1.add(image);
        win1.add(table);
        win1.open();
    }
});
xhr.open("GET", url);
xhr.send();

Jodo, you really need to read documentations on using HTTP Client & Set Data on TableView . Jodo,您确实需要阅读有关在TableView上使用HTTP ClientSet Data的文档。

There is a very clean example in the docs of Titanium's Working With Remote Data Titanium使用远程数据的文档中有一个非常干净的示例

The url you are using is not returning anything other than the HTML output for that website, and secondly you can't simply set data property on tableview unless your data variable is formatted in one of this way. 您使用的url除了返回该网站的HTML输出外没有返回其他任何内容,其次,您不能简单地在tableview上设置data属性,除非以这种方式之一格式化数据变量。

[ {title: 'Apples'}, {title: 'Bananas'}, {title: 'Carrots'}, {title: 'Potatoes'} ];

Moreover, TableView's data property takes an array of Rows/Sections or a well-formatted dictionary. 而且,TableView的data属性采用行/部分数组或格式良好的字典。 See this for more TableView Guide 看到更多的TableView指南

We suggest you to please read the documentation before trying anything if you have not done that ever before. 如果您以前从未尝试过任何操作,建议您先阅读文档。 It will help you learn & understand better and definitely will save your precious time. 它将帮助您更好地学习和理解,并且肯定会节省您的宝贵时间。 :) Thanks :) 谢谢

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM