Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.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/2/jquery/77.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 无法在JS中合并JSON_Javascript_Jquery_Json - Fatal编程技术网

Javascript 无法在JS中合并JSON

Javascript 无法在JS中合并JSON,javascript,jquery,json,Javascript,Jquery,Json,我对合并JSON有问题 我有一个ajax查询,它向我的数据库查询记录。不幸的是,我必须设置退货记录限制(1000条记录)。在我的数据库中有3122条记录。这意味着我必须创建一个4个查询。我从数据库接收JSON格式的记录。每次查询之后,我都会尝试将旧的JSON与新的JSON合并。不幸的是,现在我只覆盖我的旧JSON 示例JSON答案: { “d”:[ { “数据”:{ “姓名”:“约翰”,“姓氏”:“史密斯”,“年份”:“21” },“城市”:“新城市” 约克,“街”:“墙” “街道” },{ “

我对合并JSON有问题

我有一个ajax查询,它向我的数据库查询记录。不幸的是,我必须设置退货记录限制(1000条记录)。在我的数据库中有3122条记录。这意味着我必须创建一个4个查询。我从数据库接收JSON格式的记录。每次查询之后,我都会尝试将旧的JSON与新的JSON合并。不幸的是,现在我只覆盖我的旧JSON

示例JSON答案:

{

“d”:[

{

“数据”:{

“姓名”:“约翰”,“姓氏”:“史密斯”,“年份”:“21”

},“城市”:“新城市” 约克,“街”:“墙” “街道”

},{

“数据”:{

“姓名”:“乔治”,“姓氏”:“史密斯”,“年份”:“26”

},“城市”:“拉斯维加斯”,“街道”:“凯撒”

}]"

所有返回的JSON都具有相同的结构,但数据不同

我的JS代码如下所示:

var jsonVar;

function createQuery(itemCount) {

    var top = 1000;
    var skip = 0;
    var urlQuery = databaseURL+skip;

    if (itemCount > 1000) {

        var loopQuery = Math.round(itemCount / 1000);

        for (var i = 0; i < loopQuery + 1; i++) {

            skip = 1000 * i;
            urlQuery = databaseURL+skip;

            var call = $.ajax({

                url: urlQuery,

                type: "GET",

                dataType: "json",

                async: false,

                headers: {

                    Accept: "application/json;odata=verbose"

                },
                success: function (data, textStatus, jqXHR) {
                    merge(jqXHR);
                }

            });

        }
      alert(jsonVar.responseText);
    } else {

    }


    function merge(jqXHR) {
        alert(jqXHR.responseText);
        jsonVar = $.extend(jsonVar, jqXHR);
    }

在给定的代码中,合并函数中的行

 jsonVar = $.extend(jsonVar, jqXHR);
产生问题的原因是您正在扩展jsonVar中的jqXHR(它是XMLHTTPRequest对象的超集)属性

试试这个代码

var tempdata = $.parseJSON(jqXHR.responseText);
jsonVar = $.merge(jsonVar,tempdata.d);
请尝试以下示例代码:

var tempData =    {

"d":[

{

"data":{

"name":"John","surname":"Smith","year":"21"

},"city":"New York","Street":"Wall Street"

},{

"data":{

"name":"George","surname":"Smith","year":"26"

},"city":"Las Vegas","Street":"Ceasar"

}]

}
var jsonVar =    [

{

"data":{

"name":"John","surname":"Smith","year":"21"

},"city":"New York","Street":"Wall Street"

},{

"data":{

"name":"George","surname":"Smith","year":"26"

},"city":"Las Vegas","Street":"Ceasar"

}];
jsonVar = $.merge(jsonVar,tempData.d);

console.log(jsonVar);

非常感谢@RakeshChouhan

我修改了一点代码,多亏了
$。merge
工作正常

在第一步中,我将向
jsonVar
添加一个对象,合并后将其删除

我这样做是因为在开始时的
jsonVar
为空且
$。merge
返回错误,它无法返回未定义的
长度(
jsonVar
为空)

这是我的密码:

var jsonVar;

function createQuery(itemCount) {

    var top = 1000;
    var skip = 0;
    var urlQuery = databaseURL+skip;

    if (itemCount > 1000) {

        var loopQuery = Math.round(itemCount / 1000);

        for (var i = 0; i < loopQuery + 1; i++) {

            skip = 1000 * i;
            urlQuery = databaseURL+skip;

            var call = $.ajax({

                url: urlQuery,

                type: "GET",

                dataType: "json",

                async: false,

                headers: {

                    Accept: "application/json;odata=verbose"

                },
                success: function (data, textStatus, jqXHR) {
                    merge(data);
                }

            });

        }

    } else {

    }


    function pairJson(data,i) {

        if(jsonVar == undefined){
            jsonVar = [{name:'delete me'}];
        }

        jsonVar = $.merge(jsonVar,data.d);

        if(i == 0){
            jsonVar.splice(0,1);
        }
    }

}
var-jsonVar;
函数createQuery(itemCount){
var-top=1000;
var-skip=0;
var urlQuery=databaseURL+skip;
如果(itemCount>1000){
var loopQuery=Math.round(itemCount/1000);
对于(变量i=0;i
对此我不是很确定,但它不会是
jsonVar=$.extend(jsonVar.d,jqXHR)
因为
d
键将被替换,因为它始终是同一个键。请确保在第一次使用之前初始化了jsonVar.d。不幸的是,在开始时,jsonVar为空。在第一步,它会返回一个错误“无法读取未定义的属性“d”。不幸的是,即使第一步也无法完成。我收到此错误:”当我将$.merge更改为$.extend时,无法读取undefined“的属性'length',它正在工作,但问题是相同的。它只是在覆盖JSON,因此JSON响应可能有问题。
var jsonVar;

function createQuery(itemCount) {

    var top = 1000;
    var skip = 0;
    var urlQuery = databaseURL+skip;

    if (itemCount > 1000) {

        var loopQuery = Math.round(itemCount / 1000);

        for (var i = 0; i < loopQuery + 1; i++) {

            skip = 1000 * i;
            urlQuery = databaseURL+skip;

            var call = $.ajax({

                url: urlQuery,

                type: "GET",

                dataType: "json",

                async: false,

                headers: {

                    Accept: "application/json;odata=verbose"

                },
                success: function (data, textStatus, jqXHR) {
                    merge(data);
                }

            });

        }

    } else {

    }


    function pairJson(data,i) {

        if(jsonVar == undefined){
            jsonVar = [{name:'delete me'}];
        }

        jsonVar = $.merge(jsonVar,data.d);

        if(i == 0){
            jsonVar.splice(0,1);
        }
    }

}