Здравствуйте, я новичок в программировании, и я пытаюсь использовать ajax и хотел бы получить значение из этого php, но не могу заставить его работать
$userID = $_SESSION['id'];
$query = "SELECT * from ipcr where userID = '".$userID."'";
$result = mysqli_query($conn, $query);
while ($row = mysqli_fetch_assoc($result)) {
$current_id = $row['id'];
$current_details = $row['details'];
$current_dateCreated = $row['dateCreated'];
$current_ipcrCode = $row['ipcrCode'];
$current_employeeNumber = $row['employeeNumber'];
$array = array(
'id'=>$current_id,
'details' => $current_details,
'dateCreated' => $current_dateCreated,
'ipcrCode' => $current_ipcrCode,
'employeeNumber' => $current_employeeNumber
);
echo json_encode($array);
}
но я продолжаю получать сообщение об ошибке:
SyntaxError: Unexpected token < in JSON at position 173
и когда я пытаюсь проверить свой json, он дает эта ошибка
Это фактический вывод, который повторил php.
{"id":"21836","details":"Details here","dateCreated":"2018-08-01 14:25:28","ipcrCode":"22703","employeeNumber":"140010663"}
{"id":"21837","details":"details here","dateCreated":"2018-08-01 14:25:57","ipcrCode":"22703","employeeNumber":"140010663"}
Что-то не так с тем, как я использую json_encode? похоже, что формат, который я повторил, неправильный.
также так выглядит мой скрипт
function get_ipcr() {
var userID = <?php echo $_SESSION['id']; ?>;
$.ajax({
type: "POST",
url: "../includes/php/load_ipcr.php",
dataType: "json",
success: function(results) {
alert("success");
},
error: function (jqXHR, textStatus, errorThrown) {
alert(errorThrown);
}
});
}






Проблема в том, что вы повторяете объект JSON в цикле. Это приводит к чему-то вроде {valid JSON}{valid JSON}, который не является действительным JSON.
Вы можете исправить это:
$employees = array();
while ($row = mysqli_fetch_assoc($result)) {
$current_id = $row['id'];
$current_details = $row['details'];
$current_dateCreated = $row['dateCreated'];
$current_ipcrCode = $row['ipcrCode'];
$current_employeeNumber = $row['employeeNumber'];
// Record into employees array.
$employees[] = array(
'id'=>$current_id,
'details' => $current_details,
'dateCreated' => $current_dateCreated,
'ipcrCode' => $current_ipcrCode,
'employeeNumber' => $current_employeeNumber
);
}
echo json_encode($employees);
Добро пожаловать в stackoverflow!
Есть несколько вещей, о которых вы услышите из разных комментариев / ответов, я рекомендую вам их прислушаться - это может показаться ошеломляющим или вроде «слишком много информации» - но поверьте мне, мы все здесь, чтобы помочь!
Ответ на вашу проблему
Превратите строку JSON весь в единый массив (массив массивов) вместо многократного повторения строки JSON внутри цикла.
Дополнительный совет
Кроме того, в качестве подсказки, вы увеличиваете набор текста, назначая все переменные ($current_id = $row['id'] и т. д.). Вы можете просто использовать $row['id'] напрямую ... ниже вы можете видеть, что я показал один способ оптимизации вашего кода:
// shorthand version of $array = array()
$array = [];
while ($row = mysqli_fetch_assoc($result)) {
// don't bother assigning $row values to a series of variables
// removed all the lines like the next one....
// $current_id = $row['id'];
// push this record onto the array of arrays....
$array[] = [
// assign the array values directly from $row
'id' =>$row['id'],
'details' => $row['details'],
'dateCreated' => $row['dateCreated'],
'ipcrCode' => $row['ipcrCode'],
'employeeNumber' => $row['employeeNumber']
];
}
echo json_encode($array);
И наконец, САМОЕ ВАЖНОЕ
Пожалуйста, пожалуйста - НЕ пишите подобные запросы. Он широко открыт для атак с использованием SQL-инъекций, что является серьезной проблемой.
Пожалуйста посмотреть этот пост о том, как предотвращение атак с использованием SQL-инъекций.
Спасибо за ответ и все советы!
Ваш
echo json_encode($array);- это внутри всего вашего цикла, поэтому он повторяется несколько раз. Переместите его после петли