Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 15.01.2019, 01:51
Профессор
Отправить личное сообщение для Sergey1986 Посмотреть профиль Найти все сообщения от Sergey1986
 
Регистрация: 28.02.2018
Сообщений: 172

при обработки ответа с сервера стоит
try {
jsn = JSON.parse(jsn)
} catch (e) {
alert(e) //ошибка в позиции кавычки
}

ошибка то не вываливаеться
а все норм
+ в консоли все бьеться...
Ответить с цитированием
  #12 (permalink)  
Старый 15.01.2019, 02:00
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Sergey1986,
ищите причину ошибки, вы же не руками на сервере готовите json, может в исходных данных бардак, а потому и результат таков. Вот ваши данные и проблем не будет:

<?
if($_POST) {
    $a = (object)[
        ['id'=>1, 'name'=> 'ООО "Газпром"'], //пусть это имя в двойных кавычках  
        ['id'=>2, 'name'=> "ООО 'Шел'"] //пусть это имя в одинарных кавычках
    ];
    
    exit(json_encode($a, JSON_UNESCAPED_UNICODE));
}
?>
<html>
<head>
<meta charset="utf-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script type="text/javascript">
$.post(location, {p:1}, function(d) {
    try {
        d = JSON.parse(d);
        alert(d[0].name+'\n'+d[1].name)
    } catch (e) {
        alert(e)
    }
})
</script>
</head>
</html>


А вы не выясняя причин, хотите методом научного тыка выкрутиться.

Последний раз редактировалось laimas, 15.01.2019 в 02:23.
Ответить с цитированием
  #13 (permalink)  
Старый 15.01.2019, 02:36
Профессор
Отправить личное сообщение для Sergey1986 Посмотреть профиль Найти все сообщения от Sergey1986
 
Регистрация: 28.02.2018
Сообщений: 172

ОКАЙ, поэтапно
из бд
array(2) {
[0]=>
array(2) {
["id"]=>
string(1) "1"
["name"]=>
string(25) "ООО "Сортир 123""
}
[1]=>
array(2) {
["id"]=>
string(1) "2"
["name"]=>
string(15) "ООО 'Хер'"
}
}

$data = ['data' => $этот_массив, 'шляпа' => 'еще мусора']

далее это в
$response = json_encode($data, JSON_UNESCAPED_UNICODE );
exit ($response);

обработка ответа

{..... "data":{"list":[{"id":"1","name":"ООО \"Сортир 123\""},{"id":"2","name":"ООО 'Хер'"}]}}

далее распарсить

data:
list: Array(2)
0: {id: "1", name: "ООО "Сортир 123""}
1: {id: "2", name: "ООО 'Хер'"}
length: 2
__proto__: Array(0)
__proto__: Object

вроде все честно...

1: {id: "2", name: "ООО 'Хер'"} это выводиться все ок, так как там одинарные ковычки

0: {id: "1", name: "ООО "Сортир 123""} а вот это обрубаеться....
Ответить с цитированием
  #14 (permalink)  
Старый 15.01.2019, 02:44
Профессор
Отправить личное сообщение для Sergey1986 Посмотреть профиль Найти все сообщения от Sergey1986
 
Регистрация: 28.02.2018
Сообщений: 172

надо добавить что в консоли браузера все выволдиться как положено
а вот если
запихивать в

html += '... '+ data.list[0].name + '....';
$('#idt').append(html);

выводит ООО при двойных ковычках
а при одинарных ввыодит весть текст
Ответить с цитированием
  #15 (permalink)  
Старый 15.01.2019, 02:53
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Если так [{"id":"1","name":"ООО \"Сортир 123\""},{"id":"2","name":"ООО 'Хер'"}] и это ajax, то проблем быть не должно. Ну это тоже самое как alert("A \"B\""), обычное экранирование. Что-то тут не то.
Ответить с цитированием
  #16 (permalink)  
Старый 15.01.2019, 02:59
Профессор
Отправить личное сообщение для Sergey1986 Посмотреть профиль Найти все сообщения от Sergey1986
 
Регистрация: 28.02.2018
Сообщений: 172

упихваю это вот сюда
html += '<input id="" type="text" name="contractors-name" value="' + json.data.list[1].name + '" autocomplete="off" required>';
Ответить с цитированием
  #17 (permalink)  
Старый 15.01.2019, 03:03
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Ну так чего вы хотите, вы пишите об ошибке, которой по идее быть не должно, коли в консоли есть. А оказывается вы впихиваете в двойные кавычки двойные кавычки - value="' + json.data.list[1].name + '"

Посмотрите html после этой операции, станет понятно причина - JSON.parse тут вообще не причем. Экранировать надо кавычки в name для такой вставки.
Ответить с цитированием
  #18 (permalink)  
Старый 15.01.2019, 03:12
Профессор
Отправить личное сообщение для Sergey1986 Посмотреть профиль Найти все сообщения от Sergey1986
 
Регистрация: 28.02.2018
Сообщений: 172

точно, ни какой магии
Ответить с цитированием
  #19 (permalink)  
Старый 15.01.2019, 03:12
Профессор
Отправить личное сообщение для Sergey1986 Посмотреть профиль Найти все сообщения от Sergey1986
 
Регистрация: 28.02.2018
Сообщений: 172

т.е. перед вставкой
Ответить с цитированием
  #20 (permalink)  
Старый 15.01.2019, 03:20
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Sergey1986
т.е. перед вставкой
<input value="<?=htmlspecialchars('ООО "Газпром"', ENT_QUOTES)?>" />


О чем нибудь это говорит? Не хотите проблем подобных, значит пропускайте строковые значения через htmlspecialchars, то есть до декодирования json в вашем случае.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отследить клик по дочернему объекту AllanZ jQuery 3 05.09.2012 12:38
Как вытащить текст из тэга XML-документа? (Не AJAX)) ILL-JAH Общие вопросы Javascript 40 24.12.2011 22:01
DOM vs iframe. Как в ифрейме заменить выделенный текст (его innerHTML)? Бухалыч Events/DOM/Window 4 20.08.2009 14:30
получил текст, как его вместить в таблицу? Serj_Goblin Общие вопросы Javascript 14 14.08.2009 09:44
Вопрос по относительному позиционированию DIV XPOMOB (X)HTML/CSS 11 15.07.2009 17:02