Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.08.2019, 15:24
Новичок на форуме
Отправить личное сообщение для vlasenkov Посмотреть профиль Найти все сообщения от vlasenkov
 
Регистрация: 16.09.2013
Сообщений: 8

Получение массива в JS от PHP через ajax
Здравствуйте! Столкнулся с проблемой.
Есть обращение к PHP файлу через AJAX, для получения массива даных:
var U = new Array();
           jQuery.ajax({
                url: 'assets/template/js/calc/getcoefu.php',
                type: 'GET',
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                data: 'file='+fileU,
                success: function(data){
                    U = jQuery.parseJSON(data);
                }
            });
            
            console.log(U);

PHP-файл:
header('Content-Type: application/json');

$file = $_SERVER['DOCUMENT_ROOT'].'/'.$_GET['file'];

$fp = fopen($file, 'r');
$data = array();
$i = 0;

while (($row = fgetcsv($fp, false, ';'))) {
	$row = array_map(function($item) {
		$item = preg_replace('/.+=([0-9,\.]+)/', '$1', $item);
		return $item+0;
	}, $row);
	array_shift($row);
	
	if( $i > 3 )
	    $data[] = $row;
	
    $i++;
}

fclose($fp);

echo json_encode($data);
exit;

PHP-файл выводит следующий массив:
Код:
[[74,48,38,46,44,37,37,31],[85,59,48,57,54,47,46,40],
[92,68,56,64,61,54,53,47],[100,78,64,73,69,63,62,55],
[105,85,70,79,74,68,67,61],[111,93,78,86,80,76,74,68],
[115,100,83,92,85,81,80,74],[118,105,88,96,89,86,84,79],
[121,111,92,100,92,89,88,83],[123,114,95,103,95,93,91,86]]
Но на странице я получаю ошибку:
Код:
Uncaught SyntaxError: Unexpected token , in JSON at position 2
И не могу понять в чем ошибка. Если не ставлю parseJSON, то массив пустой. Вроде все правильно делаю.
Кто-нибудь с этим сталкивалсс, может подсказать что делаю не так?
Спасибо!
Ответить с цитированием
  #2 (permalink)  
Старый 01.08.2019, 15:35
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,103

vlasenkov,
success: function(data){
 U = data;
console.log(U);
                }
Ответить с цитированием
  #3 (permalink)  
Старый 01.08.2019, 15:35
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от vlasenkov
.$_GET['file'];
Так нельзя, это дыра в безопасности.

Насчет ошибки, что-то выводится в браузер кроме json, это может быть BOM, с которым сохранен файл сценария, а его визуально не видно.

array_shift($row); - а наоборот нельзя, ведь это постоянно перебирать массив?

return $item+0; а это зачем?

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

Только сейчас обратил внимание: если явно указан тип ожидаемых данных - dataType: "json", то data уже объект, и jQuery.parseJSON(data) не требуется.
Ответить с цитированием
  #5 (permalink)  
Старый 01.08.2019, 23:13
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от laimas
это может быть BOM, с которым сохранен файл сценария
И как такое может быть, если в ошибке написано:
Код:
Uncaught SyntaxError: Unexpected token , in JSON at position 2
Т. е. первые два символа подходили под определение формата JSON.

Сообщение от laimas
это может быть BOM, с которым сохранен файл сценария, а его визуально не видно.
Так как включить?

Только пробел видно, вместо табуляции вставляется пробел и вместо неразрывного пробела нулевой ширины просто пустое место...

<textarea>{
	"usd": 27
}</textarea>
<style>

@font-face {
    font-family: "Laimas";
    src: url("https://cdn.glitch.com/348d485e-4ba6-4841-a41e-5865874b2d66/laimas-normal.ttf");
    unicode-range: U+9, U+20, U+FEFF; 
}

textarea {
    font: 200% "Laimas", sans-serif;
    width: 100%;
    height: 4em;
}


</style>


Оно же нарисовано в шрифте...

Последний раз редактировалось Malleys, 01.08.2019 в 23:39.
Ответить с цитированием
  #6 (permalink)  
Старый 02.08.2019, 04:14
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Очередная прострация для "язык почесать".
Ответить с цитированием
  #7 (permalink)  
Старый 02.08.2019, 13:08
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от laimas
Очередная прострация для "язык почесать".
И как это помогает решить проблему?

Есть шрифт Laimas, в котором прорисованы три символа:
  • табуляция (в виде линейки, но можно и в виде тире)
  • пробел (в виде звёздочки, но можно и в виде точки на уровне строки)
  • неразрывный пробел нулевой ширины (а чем вам не нравится?)

laimas, это же удобно, когда видна табуляция, пробел, неразрывный пробел нулевой ширины? По крайней мере это можно нарисовать в шрифте, вопрос в том почему браузер не использует их, а только пробел. Может какие-то настройки в шрифте нужно указать?
Ответить с цитированием
  #8 (permalink)  
Старый 02.08.2019, 15:52
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Malleys
это же удобно, когда видна табуляция, пробел, неразрывный пробел нулевой ширины?
Для того чтобы просмотреть форматированную json строку на стороне сервера (для РНР) достаточно json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE). Вторая константа позволит читать не латиницу вместо тупо смотреть на юникод.

Поэтому не "а чем вам не нравится?", а мне оно не нужно. А для того чтобы понять, что есть грязь до/после строки в виде непечатного, для этого достаточно сравнить длины строк на сервере и на клиенте.

То есть, это я бы так действовал, а вы предлагайте свои инструменты автору, к чему возражения лично мне?

Сообщение от Malleys
И как это помогает решить проблему?
Вы можете пояснить каким образом пространный с картинками "исторический опус" о причинах первого дня недели "понедельник" у "коммунистов" помог теме? Во-первых это известно давно и без гугла, и я не настолько наивен, чтобы считать вас "и швец, и жнец, и на дуде игрец". Как же мне воспринимать эти ваши опусы? Ну они кроме срача в теме ничего не дают.
Ответить с цитированием
  #9 (permalink)  
Старый 02.08.2019, 18:12
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от laimas
А для того чтобы понять, что есть грязь до/после строки в виде непечатного, для этого достаточно сравнить длины строк на сервере и на клиенте.
Какая грязь? Это очень полезный символ! Например, указать, в каком месте не должно быть разрыва строки.

Сообщение от laimas
То есть, это я бы так действовал, а вы предлагайте свои инструменты автору, к чему возражения лично мне?
Вы затронули интересную тему, что определённый символ не видно! Хотя если прочитать сообщение об ошибке, то я не знаю, каким образом вы пришли к к выводу, что виной всему определённый символ!

Сообщение от laimas
Вы можете пояснить каким образом пространный с картинками "исторический опус" о причинах первого дня недели "понедельник" у "коммунистов" помог теме?
Вот, я нашел пост, о котором вы говорите... https://javascript.ru/forum/misc/780...tml#post510774

В теме обсуждались даты, и теперь вы знаете, почему день недели, возвращаемый date.getDay(), начинается с воскресенья.

Сообщение от laimas
пространный... "исторический опус"
Там всего-то пара-тройка коротких абзацев... значительную часть поста занимает текст о том, что <select> по умолчанию не использует картинки, это специальные ключевые слова у свойства appearance, а также код (ответ на пост №33), который делает, то что нужно автору вопроса, однако в силу субъективных обстоятельств, она не может его использовать. Хотя идея, в приведённых стилях была использована в другом примере!

Сообщение от laimas
буржуев
Сообщение от laimas
пролетариев
Сообщение от laimas
коммунистов
Сообщение от laimas
прострация для "язык почесать"
Сообщение от laimas
и швец, и жнец, и на дуде игрец
Мне просто нужно стоять в стороне и удивляться количеству ярлыков, которыми вы заклеймили людей и нации. Социальная стигматизация во всей её красе!

Кстати тема, про которую вы говорите, жила без моего участия до №66 поста, где до моего сообщения, были взаимные оскорбления, сексисткие высказывания, стигма. laimas, вы в той теме написали намного больше, включая высказывания на тему морали.

Этот пост как глоток свежего воздуха в мире, где всё начинается в понедельник.


Если вернуться к теме... Мой вопрос-то был...
Сообщение от laimas
это может быть BOM, с которым сохранен файл сценария, а его визуально не видно.
Как включить визуальное отображение этого символа? Я нарисовал шрифт (см. пост №6), но браузер использует из него только пробел.
Ответить с цитированием
  #10 (permalink)  
Старый 06.08.2019, 17:12
Новичок на форуме
Отправить личное сообщение для vlasenkov Посмотреть профиль Найти все сообщения от vlasenkov
 
Регистрация: 16.09.2013
Сообщений: 8

Сообщение от laimas Посмотреть сообщение
return $item+0; а это зачем?
Это я делаю, чтобы строки в числа перевести.
Делаю без jQuery.parseJSON, тогда возвращается пустой массив.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с запуском php функции через ajax Glebiys AJAX и COMET 3 20.08.2018 13:21
Получение и вывод псевдоэлементов через js madeas Элементы интерфейса 2 23.07.2018 17:49
data Ajax из переменной js в переменную php stormgota jQuery 13 25.06.2018 15:50
Несколько запросов к php через AJAX Florens AJAX и COMET 9 25.07.2014 21:21
Как передать значение из php в html через js Mateus jQuery 5 26.12.2012 22:24