2015-03-13 2 views
1

Мне отправлено много динамических сообщений со страницы и на стороне сервера php (server.php), чтобы сделать запрос с этим идентификатором, чтобы узнать недавно добавленные данные в MySQL.Как проверить, возвращается ли сервер undefined, а затем проигнорировать его

Если не найдены любые вновь добавленные данные в MySQL, это возвращает значение undefined. Так, согласно моему сценарию, он добавляет undefined один за другим с интервалом времени.

Так как я могу проверить, если php-запрос не может найти что-либо в sql, а затем выйти и ничего не вернуть?

Я пробовал это на своем php if(mysqli_num_rows($res)) { //do something }, но он также отображается неопределенно.

мой 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){ 
    $("#newreply"+id).append("<div class='"+ type +""+ msg.id +"'><ul><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($_REQUEST['CID']){ //cid got all dynamic post id as: 1,2,3,4 etc. 
     foreach($_REQUEST['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=".$_REQUEST['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 
      } //foreach close 
     } //foreach close 

      if ($description=="") {$detail .= '';} 
      else {$detail .=''.$description.'';} 
      $data['detail'] = $detail; 
      // do others something more 

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

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

ответ

1

Я попробовал это в моем PHP if(mysqli_num_rows($res)) { //do something }, но это также отображать undefined.

Я думаю, это должно быть потому, что вы вызываете этот код php каждые 15000 мс через ajax с помощью setTimeout.

Так что вместо остановки там вы можете просто игнорировать его с помощью кода js в функции addrep().

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

Или другой вариант использовать clearTimeout() когда вы получаете undefined.

var timer; // declare the timer here 
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.details === undefined){ 
     clearTimeout(timer); // cleartimeout timer 
    }else{ 
     $("#newreply" + id).append("<div class='" + type + "" + msg.id + "'><ul><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); 
     timer = setTimeout(waitForRep, 15000); // assign the settimeout to timer 
    }, 
    error: function(XMLHttpRequest, textStatus, errorThrown) { 
     setTimeout(waitForRep, 15000); 
    } 
    }); 
} 

$(document).ready(function() { 
    waitForRep(); 
}); 
+0

Thank u sir. 1st one stop undefined value, но также получает только 1-е значение CID. Второй я пытаюсь. – koc

Смежные вопросы