【问题标题】:With jQuery how I assign the json array to the index of the jquery array使用 jQuery,我如何将 json 数组分配给 jquery 数组的索引
【发布时间】:2018-02-27 11:21:59
【问题描述】:

假设我从 first.phpsecond.php(用 php 编码)检索数据(以 json 形式)。我想在 jQuery 数组的数组中分配这个 json 数据。设数组为var total = [index1,index2],来自first.php的第一个json数据将分配给total的第一个index,第二个来自second.php 分配给total 的第二个索引。我将如何做到这一点。我已经尝试了以下代码。我是更大的,所以如果有任何错误,请见谅。谢谢你回复我。

jquery

var total = ['index1','index2'];
var ajax = new XMLHttpRequest();
var method = "GET";
var url = "first.php";
var asynchronous = true;

ajax.open(method,url,asynchronous);
    //sending ajax request.
ajax.send();

//receiving response from  the first.php
ajax.onreadystatechange = function(){
if(this.readyState== 4 && this.status == 200){ //readyState==4 means request is finish and response is ready 
    //status==200 is 'OK'
    var data = JSON.parse(this.responseText);
    for(var a=0; a<data.length; a++){
        total['index1']=data[a];
    }
  }
}console.log(total['index1']); //i want the output here

var url="second.php";
ajax.open(method,url,asynchronous);
ajax.send();
ajax.onreadystatechange = function(){
if(this.readyState== 4 && this.status == 200){ //readyState==4 means request is finish and response is ready 
    //status==200 is 'OK'
    var data1 = JSON.parse(this.responseText);
    for(var a=0; a<data1.length; a++){
        total['index2']=data1[a];
    }
  } 
}

first.php

include 'connection.php';

$data = array();
$query=mysqli_query($con,"select * from tabel_name ORDER BY id ASC");
if(mysqli_num_rows($query)){
    while($row = mysqli_fetch_assoc($query)){
        $data[] =$row; 
    };
    echo json_encode($data);
}

second.php

include 'connection.php';

$data = array();
$query=mysqli_query($con,"select * from tabel_name ORDER BY id ASC");
if(mysqli_num_rows($query)){
    while($row = mysqli_fetch_assoc($query)){
        $data[] =$row; 
    };
    echo json_encode($data);
}

我只是想将第一个 json 数组分配给 index1 并在console.log 中显示,第二个 json 数组分配给 index2。

【问题讨论】:

    标签: php jquery arrays json


    【解决方案1】:

    我发现了问题。您在 onreadystatechange 回调中使用“this”,但“this”不设计您的“ajax”变量。

    我已在“ajax1”中重命名了您的“ajax”变量,并创建了第二个“ajax2”。

    请试试这个代码:

    var total = {index1: [], index2: []};
    var ajax1 = new XMLHttpRequest();
    var method = "GET";
    var url = "first.php";
    var asynchronous = true;
    
    ajax1.open(method,url,asynchronous);
    
    //receiving response from  the first.php
    ajax1.onreadystatechange = function(){
        if(ajax1.readyState== 4 && ajax1.status == 200){ //readyState==4 means request is finish and response is ready
            //status==200 is 'OK'
            var data = JSON.parse(ajax1.responseText);
            for(var a=0; a<data.length; a++){
                total['index1'].push(data[a]);
            }
            console.log('=== index1 ===');
            console.log(total['index1']); //i want the output here
        }
    }
    //sending ajax request.
    ajax1.send();
    
    
    var ajax2 = new XMLHttpRequest();
    var url="second.php";
    ajax2.open(method,url,asynchronous);
    ajax2.onreadystatechange = function(){
        if(ajax2.readyState== 4 && ajax2.status == 200){ //readyState==4 means request is finish and response is ready
            //status==200 is 'OK'
            var data1 = JSON.parse(ajax2.responseText);
            for(var a=0; a<data1.length; a++){
                total['index2'].push(data1[a]);
            }
            console.log('=== index2 ===');
            console.log(total['index2']); //i want the output here
        }
    }
    ajax2.send();
    

    【讨论】:

    • 谢谢。我有一个问题?我可以问吗?
    • `total['index1']`在这个数组中会出现总的第一个索引吗?我是对的,它等于 total['index1'] 意味着 total={index:[]}?我是对的
    • total['index1'] = total.index1 你可以通过 var total = {index1: []} 创建它但是 total['index1'] 不是 total={index:[]} 因为缺少“1”。请注意,“index1”是您的初始键,我们可以有另一个键,例如“myindex”:total['myindex'] = total.myindex 或 total={myindex:[]}
    • 是啊是啊抱歉我错过了“1”
    【解决方案2】:

    您使用了错误的属性“长度”。正确的属性是“for”语句中的“length”。

    ajax.onreadystatechange = function(){
    if(this.readyState== 4 && this.status == 200){ //readyState==4 means request is finish and response is ready 
        //status==200 is 'OK'
        var data = JSON.parse(this.responseText);
        for(var a=0; a<data.length; a++){
            total['index1']=data[a];
        }
    
        // Here, server has returned response
        console.log(total['index1']); //i want the output here
      }
    }
    // Here, server has not yet returned response
    

    【讨论】:

    • 对不起,我编辑了我的问题,现在你可以看到正确的了
    • 好的,您的console.log 立即运行,但尚未返回ajax 请求。尝试插入 console.log(total);就在 onreadystatechange 回调中的 for 语句之后。
    • 我的代码是对还是错。 json 数据是否会正确分配给索引?您可以编辑我的问题并将其发布。作为答案
    • 我认为他是对的,但您处于异步模式。因此,您的服务器会在您运行 console.log(total['index1']) 后响应。
    • 其实我没有正确理解你,你能详细说明一下吗?
    猜你喜欢
    • 2013-12-02
    • 2016-06-13
    • 1970-01-01
    • 2015-09-02
    • 1970-01-01
    • 2012-01-26
    • 2011-11-13
    • 2019-03-17
    相关资源
    最近更新 更多