Javascript 在initial.ajax调用之外使用JSON数据-访问剩余的JSON数据

Javascript 在initial.ajax调用之外使用JSON数据-访问剩余的JSON数据,javascript,jquery,json,codeigniter,jquery-masonry,Javascript,Jquery,Json,Codeigniter,Jquery Masonry,这在一定程度上是对我的一项工作的延伸: 我现在可以从我的CI控制器成功返回JSON数据,该控制器返回: {"results":[{"id":"1","Source":"My Source","Title":"My Title". . . . function outputAjax() { $this->load->model('my_model'); $data['results'] = $this->site_model->getInfo();

这在一定程度上是对我的一项工作的延伸:

我现在可以从我的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));
}
控制器:

{"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>');
                    });
$(文档).ready(函数()
{    
$.ajax(
{
网址:'http://localhost/project/index.php/controller/outputAjax',
数据类型:'json',
成功:功能(数据)
{   
var limit=19;//最初需要多少个json对象
var arr=[];//已使用对象的item.id
$.each(数据、结果、功能(索引、项目)
{
if(index>limit)返回false;//获取所需的初始json对象
arr.push(item.id);//存储使用的json对象id
//对item.id、item.Title、item.Description等的一系列检查。。。

$(“#内容”).append(“我认为您可以将您的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;
}
//全局变量的声明
data='';//JSON数据将存储在此处
我的URL=http://localhost/project/index.php/controller/outputAjax';
指数=0;
$(文档).ready(函数(){
$.getJSON(myurl,函数(JSON){data=JSON;setDivs(20);});
$('#next20')。单击(function(){setDivs(20);});
});
函数setDivs(num){
$(“#砌体内容”).empty();
对于(var i=index;i$(“#内容”).append(“您可以在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个位置搜索特定的标记,然后用新数据替换该数据。我认为基本上清空
$(“#砌体内容”).empty()
然后使用append或类似的方法重新填充新元素。

一个可能的解决方案是让每个JSON对象返回一个Javascript对象,该对象可以获取返回的JSON数据的参数,例如(id、title、desc、link…)?您能否将data.results分配给保存更新逻辑的作用域中声明的变量?@ScottEvernden除非我有误解,否则data.results在.ajax请求之外是无法访问的。将我的大部分代码放在
.ajax{}内难道不被视为不好的做法吗
以便访问。感谢您的帮助!为了澄清,我不会同时更新页面上所有div的内容,而是在完成所有div的初始加载后,使用时间间隔更新各个div。(例如:每隔5秒左右用一个新的JSON对象的数据更新每个div。感谢您的帮助,我将添加您提到的内容和其他一些想法,并很快报告回来。旁注:将JSON数据放在全局位置不会被认为是不好的做法吗?因为它在浏览器中完全可用,所以我假设它会好的。你会同意吗?不客气,我希望这会有所帮助。是的,我有一些应用程序,每天有数千名用户使用JSON,就像那样-应该可以,因为你正在将数据卸载到用户的浏览器中,让客户端完成所有的“繁重”工作。=Pdata.results[I].Id工作得很好。您的for循环和getJSON也工作得很好。谢谢!问题是,我仍然想知道JSON数据的哪个Id已被输出。我将如何跟踪它?我知道我可以使用
array.push();
将项添加到数组中,但如何在从函数setDivs()中获取此信息时使此数组全局可用;谢谢!因为我只在一个时间间隔内更新单个div的内容,不想输出已经输出的JSON项,我需要通过I值或每个div中使用的id知道要更新哪个div。我想我的做法是创建另一个函数updateDiv()这将通过这些参数。有什么建议或帮助吗?感谢您迄今为止的帮助,真的帮助我了解到目前为止需要做什么。@t如果您想要一个全局可用的数组,您可以在声明
data='';
后立即添加
seen=new array();
。然后,使用
seen.push(i);
存储所见项目的索引,或使用
seen.push(data.results[i].id)
如果您愿意存储ID。您的另一个问题也很好,我建议您创建一个新的StackOverflow帖子,并从这里链接到它。这将更容易帮助您了解项目的总体情况。您是否设置分页?Tom Bird关于设置模板的建议也是一个很好的建议,我可以提供一个圆滑的例子。