Мне нужно получить из моей базы данных список пользователей, которые могут иметь то же имя. У меня проблемы с преобразованием результата моего запроса в json.

Если я собирался получить только один результат, код будет работать, но, поскольку я начал использовать LIKE, он начал давать сбои.

PHP код:

<?php


$q = $_POST['q'];

require('connect.php');

$i = 0;

$sql="SELECT `_nome`, `_endereco`, `_telefone`, `_imgstring`, `_dtAcesso`, `_descricao`, `_fkIdUser` FROM `tbvisitantes` WHERE _nome LIKE CONCAT ('%',?,'%')";
$stmt= $conn->prepare($sql);
$stmt->bind_param('s', $q);


if ($stmt){
$stmt->execute();

$stmt->bind_result($rName, $rEndereco, $rTelefone, $rImgString, $rDtAcesso, $rDescricao, $rFkIdUser);

while ($row = $stmt->fetch_array()){

$json_output = array('name' => $rName, 'address' => $rEndereco, 'tel' => $rTelefone, 'imgString' => $rImgString, 'dtAcesso' => $rDtAcesso, 'descricao' => $rDescricao, 'fkIdUser' => $rFkIdUser);

echo json_encode($json_output);

}

$stmt->close();

}
mysqli_close($conn);

?>

Скрипт, который получает результат:

$.ajax({
url: 'getuser.php',
type: 'POST',
data: {q: str},
success: function(jsonString){

$vIndex = '<input class="vInput"></input>';

$($cadContent).appendTo('#cadContent');

var json = $.parseJSON(jsonString);

var jsonLenght = Object.keys(jsonString).length;


$.each(json, function(index, el) {

$($vIndex).attr('id', index).val(el).appendTo('#txtHint');


});


}
})
.done(function() {
console.log("success");
})
.fail(function(xhr) {

alert("An error ocurred:" + xhr.status + xhr.statusText);

console.log('failed');
})
.always(function() {
console.log("complete");
});


}

Я думаю, что моя проблема могла возникнуть при создании моего JSON, но я не знаю, как это исправить.

-1
Lucas Leite 19 Апр 2016 в 20:48

2 ответа

Лучший ответ

Вы не можете повторить множественный ответ в json. Вы должны объединить ответ в один массив, а затем вы должны повторить ответ.

Этот фрагмент ниже будет вам полезен,

Страница сервера:

while ($row = $stmt->fetch_array()){

   $json_output[] = array('name' => $rName, 'address' => $rEndereco, 'tel' => $rTelefone, 'imgString' => $rImgString, 'dtAcesso' => $rDtAcesso, 'descricao' => $rDescricao, 'fkIdUser' => $rFkIdUser);

}
echo json_encode($json_output);

На странице Ajax:

// your success callback handler
function handler( response ) {
  // execute code for object 1
  doStuff(response[0] );
  // execute code for object 2
  doOtherStuff( response[1] );
}
0
Akilan 19 Апр 2016 в 17:55

Вам нужно объединить строки в один массив JSON:

if ($stmt){
  $stmt->execute();

  $stmt->bind_result($rName, $rEndereco, $rTelefone, $rImgString, $rDtAcesso, $rDescricao, $rFkIdUser);
  $rows = array();

  while ($row = $stmt->fetch_array()){

    $json_output = array('name' => $rName, 'address' => $rEndereco, 'tel' => $rTelefone, 'imgString' => $rImgString, 'dtAcesso' => $rDtAcesso, 'descricao' => $rDescricao, 'fkIdUser' => $rFkIdUser);
    $rows[] = $json_output;
  }
  echo json_encode($rows);
}
0
Fabricator 19 Апр 2016 в 17:52