Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.12.2017, 18:07
Аспирант
Отправить личное сообщение для mazahaler Посмотреть профиль Найти все сообщения от mazahaler
 
Регистрация: 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);

Как я могу это исправить?
Ответить с цитированием
  #2 (permalink)  
Старый 29.12.2017, 18:44
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от mazahaler
`String2`='$Name' AND `String7`='$Desc' AND `ID`=$ID"
Так нельзя делать, это опасно!
А ошибка в том, что сервер отдает не JSON, а "кучи json строк". Сперва нужно получить данные запроса, которые в JSON и отдавать.
Ответить с цитированием
  #3 (permalink)  
Старый 29.12.2017, 19:12
Аспирант
Отправить личное сообщение для mazahaler Посмотреть профиль Найти все сообщения от mazahaler
 
Регистрация: 20.11.2017
Сообщений: 72

Сообщение от laimas Посмотреть сообщение
Сперва нужно получить данные запроса, которые в JSON и отдавать.
Спасибо, можете пожалуйста написать пример?
Ответить с цитированием
  #4 (permalink)  
Старый 29.12.2017, 21:23
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Вместо строк 13 - 23 получайте сразу весь набор как $query->fetchAll(), который и отдавайте как JSON.

exit(json_encode($query->fetchAll()));


Если предполагается диалог либо JSON, либо текст, то каким образом клиент поймет что ему пришло, если ему не сообщаться это? Либо передавайте заголовки сообщающие тип данных и разбирайтесь. Либо всегда отдавайте json и заголовок для него, в этом случае на клиенте при получении массива будет объект, а при получении "Параметры не переданы", будет строка.

Данные полученные извне подставлять в запрос не фильтруя ни в коем случае нельзя! Либо сами обрабатывайте их, либо используйте подготовленные запросы драйвера SQL.
Ответить с цитированием
  #5 (permalink)  
Старый 29.12.2017, 21:46
Аспирант
Отправить личное сообщение для mazahaler Посмотреть профиль Найти все сообщения от mazahaler
 
Регистрация: 20.11.2017
Сообщений: 72

laimas,
Спасибо!
Ответить с цитированием
  #6 (permalink)  
Старый 30.12.2017, 00:05
Аспирант
Отправить личное сообщение для mazahaler Посмотреть профиль Найти все сообщения от mazahaler
 
Регистрация: 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
Ответить с цитированием
  #7 (permalink)  
Старый 30.12.2017, 00:14
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

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);
Ответить с цитированием
  #8 (permalink)  
Старый 30.12.2017, 00:30
Аспирант
Отправить личное сообщение для mazahaler Посмотреть профиль Найти все сообщения от mazahaler
 
Регистрация: 20.11.2017
Сообщений: 72

рони,
Большое спасибо!
Ответить с цитированием
  #9 (permalink)  
Старый 30.12.2017, 08:07
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

mazahaler,
судя по объекту, вы запрашиваете одну запись из БД, а значит ни каких ни while, ни fetchAll, а так:

exit(json_encode($query->fetch()));


и клиент получит не массив объектов, а объект, получить в котором свойство так:

data.String2
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Unexpected end of JSON input dukir AJAX и COMET 2 11.12.2017 07:59
Странная ошибка Unexpected end of input в хроме faringor Opera, Safari и др. 8 05.06.2015 14:38
Зависание кнопок меню при быстром переключении (onMouseOver) Kapitan79 Элементы интерфейса 3 06.11.2013 18:18
Не срабатывает скрипт. Unexpected end of input zlodeeev Общие вопросы Javascript 6 19.07.2012 08:38
При добавлении DOCTYPE "плывут" размеры input type=text Demath (X)HTML/CSS 4 08.07.2012 19:27