Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.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 在php中有没有其他方法可以停止为json_encode返回未定义的值_Javascript_Php_Jquery - Fatal编程技术网

Javascript 在php中有没有其他方法可以停止为json_encode返回未定义的值

Javascript 在php中有没有其他方法可以停止为json_encode返回未定义的值,javascript,php,jquery,Javascript,Php,Jquery,我从一个页面和一个php服务器端pageserver.php发送了许多动态post id,用这些id进行查询,以查找mysql中新添加的数据 如果在mysql中没有发现任何新添加的数据,则返回一个未定义的值。所以我添加了这个如果msg.id!==未定义&msg.detail!==未定义&&msg.name!==未定义{//do here}以隐藏未定义的 但是在添加了上面的行之后,我的脚本很好地隐藏了未定义的值,但只返回第一个CID的新添加值 这意味着如果CID发送ids100、101、102、1

我从一个页面和一个php服务器端pageserver.php发送了许多动态post id,用这些id进行查询,以查找mysql中新添加的数据

如果在mysql中没有发现任何新添加的数据,则返回一个未定义的值。所以我添加了这个如果msg.id!==未定义&msg.detail!==未定义&&msg.name!==未定义{//do here}以隐藏未定义的

但是在添加了上面的行之后,我的脚本很好地隐藏了未定义的值,但只返回第一个CID的新添加值

这意味着如果CID发送ids100、101、102、103等。对于php,它只返回100个id的新添加值并附加它

所以,如果不使用上述方法,有没有其他方法可以在php服务器端删除未定义的值

注意:如果没有在上面的行,它会返回所有的CID值,但是如果没有找到新添加的数据,它也会返回未定义的值一个时间间隔,所以我需要停止返回未定义的值

我的javascript:

var CID = []; // Get all dynamic ids of posts (works well)
$('div[data-post-id]').each(function(i){
CID[i] = $(this).data('post-id');
});

function addrep(type, msg){
CID.forEach(function(id){
if (msg.id !== undefined && msg.detail !== undefined && msg.name !== undefined) {
    $("#newreply"+id).append("<div class='"+ type +""+ msg.id +"'><ul><div class='newkochi'>"+ msg.name +"</div><div class='cdomment_text'>"+ msg.detail +"</ul></div>");
}
});
}

function waitForRep(){
    $.ajax({
        type: "GET",
        url: "server.php",
        cache: false,
        data: {CID : CID},
        timeout:15000, 
        success: function(data){ 
            addrep("postreply", data);
            setTimeout(waitForRep, 15000 );
        },
        error: function(XMLHttpRequest, textStatus, errorThrown){
            setTimeout(waitForRep, 15000); }
    });
}

$(document).ready(function(){
    waitForRep();
});
server.php

while (true) {
    if($_GET['CID']){  //cid got all dynamic post id as: 1,2,3,4 etc.
      foreach($_GET['CID'] as $key => $value){

        $datetime = date('Y-m-d H:i:s', strtotime('-15 second'));
        $res = mysqli_query($dbh,"SELECT * FROM reply WHERE qazi_id=".$_GET['tutid']."  AND date >= '$datetime' ORDER BY id DESC LIMIT 1") or die(mysqli_error($dbh));
    $data = array();
        while($rows =  mysqli_fetch_assoc($res)){

          $data[]=$rows;

          $data['id'] = $rows['id']; 
          $data['qazi_id'] = $rows['qazi_id'];
          $data['username'] = $rows['username'];
          $data['description'] = $rows['description'];
          $data['date'] = $rows['date'];
          //etc. all
             $id = $rows['id'];
             $qazi_id = $rows['qazi_id'];
             $username = $rows['username'];
             $description = $rows['description'];
             //etc. all
          } //while close
      } //foreach close

          $name .='<p class="name">'.$username.' Says:</p>';
          $detail .=''.$description.'';

          $data['name'] = $name;
          $data['detail'] = $detail;
          // do others something more like as above

           if (!empty($data)) {
              echo json_encode($data);
              flush();
              exit(0);
           }

    } //request close
    sleep(5);
} //while close

您正在覆盖您的值

while($rows = mysqli_fetch_assoc($res)){
      $data[] = $rows;
}

这就是填充$data所需的全部操作$数据[]=$行;正在告诉PHP将$行附加到数组$数据。如果您需要更改数据,请在添加之前编辑$行。

在server.php中,您的$数据似乎只包含一行。如果my server.php$数据只包含一行,那么为什么它会获取并返回所有新值,而不在JS行上方添加。不要执行$data['id']=$rows['id'];行,因为您正在覆盖所有数据。我用另一种方法解决了此问题,但非常感谢您提供的覆盖建议