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); Как я могу это исправить? |
Цитата:
А ошибка в том, что сервер отдает не JSON, а "кучи json строк". Сперва нужно получить данные запроса, которые в JSON и отдавать. |
Цитата:
|
Вместо строк 13 - 23 получайте сразу весь набор как $query->fetchAll(), который и отдавайте как JSON.
exit(json_encode($query->fetchAll())); Если предполагается диалог либо JSON, либо текст, то каким образом клиент поймет что ему пришло, если ему не сообщаться это? Либо передавайте заголовки сообщающие тип данных и разбирайтесь. Либо всегда отдавайте json и заголовок для него, в этом случае на клиенте при получении массива будет объект, а при получении "Параметры не переданы", будет строка. Данные полученные извне подставлять в запрос не фильтруя ни в коем случае нельзя! Либо сами обрабатывайте их, либо используйте подготовленные запросы драйвера SQL. |
laimas,
Спасибо! |
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 |
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); |
рони,
Большое спасибо! |
mazahaler,
судя по объекту, вы запрашиваете одну запись из БД, а значит ни каких ни while, ни fetchAll, а так: exit(json_encode($query->fetch())); и клиент получит не массив объектов, а объект, получить в котором свойство так: data.String2 |
Часовой пояс GMT +3, время: 07:37. |