在初始.ajax调用之外使用JSON数据-访问剩余的JSON数据
Use JSON data outside of initial .ajax call - Access leftover JSON data
这在一定程度上是对我上一个问题的扩展:
我现在可以成功地从CI控制器返回JSON数据,其中返回:
{"results":[{"id":"1","Source":"My Source","Title":"My Title". . . .
控制器:
function outputAjax()
{
$this->load->model('my_model');
$data['results'] = $this->site_model->getInfo();
$this->output->set_output(json_encode($data));
}
这是我用来检索.ajax
请求的当前脚本:
$(document).ready(function()
{
$.ajax(
{
url: 'http://localhost/project/index.php/controller/outputAjax',
dataType:'json',
success: function(data)
{
var limit = 19; //how many json objects are needed initially
var arr = []; // item.id of objects that have been used
$.each(data.results, function(index,item)
{
if (index > limit) return false; // gets required initial json objects
arr.push(item.id); // stores used json objects id's
// whole bunch of checks on item.id , item.Title, item.Description, etc...
$("#masonry-content").append('<div class="item" ' + item.id + item.Title + ' ... </div>');
});
如上述代码所示,我目前正在获取JSON数据的前20个对象,并将它们附加到页面容器中。这工作得很好,但是……问题我所拥有的是,我想更新已添加到time interval
上的页面与最初返回的JSON数据的其他对象的20div中的内容。我觉得这样做的最好方法是在页面上静态地布局div,因为总是会有相同的数量,然后只需相应地更新这些div中的数据。
我的问题是如何在初始.ajax调用的范围之外访问返回的JSON数据。
例如:如果我将脚本设置的方式是,在我使初始.ajax
调用和append()
的内容与前20个JSON数据对象(item
)的容器。如何访问JSON数据中的其余对象?
我已经假定跟踪返回对象的最佳方法是存储项。每个对象的id在一个数组arr[ ]
请纠正我,如果这没有意义或他们是一个更容易的方式。但是,我仍然不知道如何访问剩余的JSON数据对象?
我觉得我好像错过了一些明显的东西,比如让我的javascript更面向对象会有所帮助,这样我就可以单独访问每个json对象并在其上执行不同的函数,但我觉得我可能会失去一点。
我认为您可以将json存储在全局变量中,并在需要时循环遍历项目,从成功加载json后调用setDivs(20)
从20开始。
// Declaration of global variables
data = ''; // JSON data will be stored here
myurl = 'http://localhost/project/index.php/controller/outputAjax';
index = 0;
$(document).ready(function () {
$.getJSON(myurl, function (JSON) { data = JSON; setDivs(20); });
$('#next20').click(function() { setDivs(20); });
});
function setDivs(num) {
$("#masonry-content").empty();
for (var i = index ; i < index + num -1; i++) {
$("#masonry-content").append('<div class="item" ' + data["results"][i].id + data["results"][i].Title + ' ... </div>');
}
index += num;
}
我还添加了代码,将在点击页面上的#next20
元素时,从json对象中更新#masonry-content
元素的下一个20div。
当然,我不知道如果你的#masonry-content
元素是空的开始。如果不是,那么在#masonry-content
元素中添加类似<div id="json-data"></div>
的东西,并通过将$('#masonry-content")
的两个实例替换为$('#json-data')
如果data["results"][i]
不工作,也许尝试data.results[i]
。
如果您正在使用Chrome,拉起控制台(CTRL+SHIFT+J)并键入data
并按enter。如果成功加载了JSON,您应该能够浏览数据对象的树。然后你可以在控制台中使用它,尝试data["results"]
, data.results
等,并继续向下工作(即尝试data["results"][0]
并验证它是否拉动第一项)。
更新:
这是一个工作的JSON/AJAX Ticker示例,它每4.5秒随机交换项。
您可以简单地在ajax调用之外声明一个变量,然后在ajax函数中完整地将变量值更新为json对象。下面我将变量命名为data
$(document).ready(function()
{
var data = '';
$.ajax(
{
url: 'http://localhost/project/index.php/controller/outputAjax',
dataType:'json',
success: function(data)
{
data = data;
});
但是,我个人会创建一个模板div,您希望如何显示单个元素,然后只需填写数据,而不是试图在20个地方搜索特定的标签,然后用新数据替换该数据。我认为这将是更容易和有效的基本上清空$("#masonry-content").empty();
,然后用新的元素填充它使用追加或类似的东西。
- 无法使用变量访问数据 JSON
- 使用 ng-repeat解析不均匀数据/ json对象
- 在没有jsonp的情况下从另一个域获取数据(json格式)
- 如何获取带参数的数据json
- 如何在android中显示实时雅虎金融股票数据..json格式如下所示
- 使用 JavaScript 将数据 json 显示到网页中
- 高位图表来源于API数据(JSON)
- 使用动态数据json初始化同位素
- Django:将数据JSON从视图传递给javascript
- 存储配置数据 (json)
- 未捕获的SyntaxError:意外的标识符图像数据json
- 接收数据json/jquery
- Jquery数据表数据json
- 不能在cakephp中使用数组数据json
- 在不锁定浏览器的情况下,将大数据JSON从REST请求反序列化为对象
- 如何读取数据JSON格式数组的字符串数据
- 我有一个流星应用程序,需要从/public/_assets/results/mmresults读取数据.Json文件,在
- 数据json不显示在html
- 使用2个下拉列表创建2个并排的表行来比较数据- JSON
- 需要将复杂的json对象转换为合适的angularjs UI树数据json结构