29.12.2017, 18:07
|
Аспирант
|
|
Регистрация: 20.11.2017
Сообщений: 72
|
|
Unexpected end of JSON input
Здравствуйте, я пытаюсь получить данные с бд с помощью ajax.
Вот jquery:
$(function(){
$("#docslistp").one("click",function(){
$('#ajaxsuccessdoc').find('.doctext1').each(function(i, elem) {
$( '#ajaxsuccessdoc' ).on('click','#updlistd'.concat(i),function() {
var ldocname=$('#ldocname'.concat(i)).text();
var ldocdesc=$('#ldocdesc'.concat(i)).text();
var id=i+1;
$.ajax({
type:"POST",
url: "UPDDOCLIST.php",
data:{ ldocname:ldocname,
ldocdesc:ldocdesc,
id:id},
success:function(data){
var newData = jQuery.parseJSON(data);
$('#namel'.concat(i)).val(newData.name);
$('#descl'.concat(i)).val(newData.desc);
}
});
$( "#flist".concat(i) ).toggle( "slow", function() {
});
});
});
});
});
Вот UPDDOCLIST.php
<?php
require_once '../connection.php';
if (isset($_POST['ldocname'])&& !empty($_POST['ldocname']) && isset($_POST['ldocdesc'])&& !empty($_POST['ldocdesc'])&& isset($_POST['id'])&& !empty($_POST['id'])){
$Name=strval($_POST['ldocname']);
$Desc=strval($_POST['ldocdesc']);
$ID=intval($_POST['id']);
/* echo $Name; */
$query =$db->query("SELECT * FROM `docarcitem` WHERE `String2`='$Name' AND `String7`='$Desc' AND `ID`=$ID");
while ($row = $query->fetch()) {
$array = array(
'name'=>$row->String2,
'desc'=>$row->String7
);
echo json_encode($array);
}
}else{
echo "Параметры не переданы";
}
?>
Скрипт выполняется, но ничего не возвращает. Также в консоли я получаю ошибку "Unexpected end of JSON input". Ошибка указывает на строку:var newData = jQuery.parseJSON(data);
Как я могу это исправить?
|
|
29.12.2017, 18:44
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от mazahaler
|
`String2`='$Name' AND `String7`='$Desc' AND `ID`=$ID"
|
Так нельзя делать, это опасно!
А ошибка в том, что сервер отдает не JSON, а "кучи json строк". Сперва нужно получить данные запроса, которые в JSON и отдавать.
|
|
29.12.2017, 19:12
|
Аспирант
|
|
Регистрация: 20.11.2017
Сообщений: 72
|
|
Сообщение от laimas
|
Сперва нужно получить данные запроса, которые в JSON и отдавать.
|
Спасибо, можете пожалуйста написать пример?
|
|
29.12.2017, 21:23
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Вместо строк 13 - 23 получайте сразу весь набор как $query->fetchAll(), который и отдавайте как JSON.
exit(json_encode($query->fetchAll()));
Если предполагается диалог либо JSON, либо текст, то каким образом клиент поймет что ему пришло, если ему не сообщаться это? Либо передавайте заголовки сообщающие тип данных и разбирайтесь. Либо всегда отдавайте json и заголовок для него, в этом случае на клиенте при получении массива будет объект, а при получении "Параметры не переданы", будет строка.
Данные полученные извне подставлять в запрос не фильтруя ни в коем случае нельзя! Либо сами обрабатывайте их, либо используйте подготовленные запросы драйвера SQL.
|
|
29.12.2017, 21:46
|
Аспирант
|
|
Регистрация: 20.11.2017
Сообщений: 72
|
|
laimas,
Спасибо!
|
|
30.12.2017, 00:05
|
Аспирант
|
|
Регистрация: 20.11.2017
Сообщений: 72
|
|
laimas,
еще вопрос. Вот допустим в переменной я получил массив вида:
[{"ID":"8","MainID_Ref":"3510","ParentType":"60","ObjectType":"117","String1":null,"String2":"222","String3":null,"String4":null,"String5":null,"String6":null,"String7":"222","String8":null,"String9":null,"String10":null,"LongInt1":null,"Double1":null,"Double2":null,"Memo1":null,"Memo2":null}]
Как теперь можно обратится к конкретному элементу? Например я хочу вывести только String2
|
|
30.12.2017, 00:14
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,121
|
|
mazahaler,
var data = [{
"ID": "8",
"MainID_Ref": "3510",
"ParentType": "60",
"ObjectType": "117",
"String1": null,
"String2": "222",
"String3": null,
"String4": null,
"String5": null,
"String6": null,
"String7": "222",
"String8": null,
"String9": null,
"String10": null,
"LongInt1": null,
"Double1": null,
"Double2": null,
"Memo1": null,
"Memo2": null
}]
alert(data[0].String2);
|
|
30.12.2017, 00:30
|
Аспирант
|
|
Регистрация: 20.11.2017
Сообщений: 72
|
|
рони,
Большое спасибо!
|
|
30.12.2017, 08:07
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
mazahaler,
судя по объекту, вы запрашиваете одну запись из БД, а значит ни каких ни while, ни fetchAll, а так:
exit(json_encode($query->fetch()));
и клиент получит не массив объектов, а объект, получить в котором свойство так:
data.String2
|
|
|
|