Получение массива в 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],Код:
Uncaught SyntaxError: Unexpected token , in JSON at position 2Кто-нибудь с этим сталкивалсс, может подсказать что делаю не так? Спасибо! |
vlasenkov,
success: function(data){
U = data;
console.log(U);
}
|
Цитата:
Насчет ошибки, что-то выводится в браузер кроме json, это может быть BOM, с которым сохранен файл сценария, а его визуально не видно. array_shift($row); - а наоборот нельзя, ведь это постоянно перебирать массив? return $item+0; а это зачем? |
Только сейчас обратил внимание: если явно указан тип ожидаемых данных - dataType: "json", то data уже объект, и jQuery.parseJSON(data) не требуется.
|
Цитата:
Код:
Uncaught SyntaxError: Unexpected token , in JSON at position 2Цитата:
Только пробел видно, вместо табуляции вставляется пробел и вместо неразрывного пробела нулевой ширины просто пустое место...
<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>
Оно же нарисовано в шрифте... |
Очередная прострация для "язык почесать".
|
Цитата:
Есть шрифт Laimas, в котором прорисованы три символа:
laimas, это же удобно, когда видна табуляция, пробел, неразрывный пробел нулевой ширины? По крайней мере это можно нарисовать в шрифте, вопрос в том почему браузер не использует их, а только пробел. Может какие-то настройки в шрифте нужно указать? |
Цитата:
Поэтому не "а чем вам не нравится?", а мне оно не нужно. А для того чтобы понять, что есть грязь до/после строки в виде непечатного, для этого достаточно сравнить длины строк на сервере и на клиенте. То есть, это я бы так действовал, а вы предлагайте свои инструменты автору, к чему возражения лично мне? Цитата:
|
Цитата:
Цитата:
Цитата:
В теме обсуждались даты, и теперь вы знаете, почему день недели, возвращаемый date.getDay(), начинается с воскресенья. Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Кстати тема, про которую вы говорите, жила без моего участия до №66 поста, где до моего сообщения, были взаимные оскорбления, сексисткие высказывания, стигма. laimas, вы в той теме написали намного больше, включая высказывания на тему морали. Этот пост как глоток свежего воздуха в мире, где всё начинается в понедельник. Если вернуться к теме... Мой вопрос-то был... Цитата:
|
Цитата:
Делаю без jQuery.parseJSON, тогда возвращается пустой массив. |
Цитата:
$item = (int)preg_replace('/.+=([0-9,\.]+)/', '$1', $item);
Кроме этого можно указать при кодировании кодировать строки содержащие только числа как числа: $a = ['1', '2', '3']; echo json_encode($a); //["1","2","3"] echo json_encode($a, JSON_NUMERIC_CHECK); //[1,2,3] |
Спасибо, но в любом случае, либо массив пустой, либо ошибка. Даже не знаю уже куда копать и что не так.
|
Я нашел ошибку. Видимо сказывается не знание о видимости переменных.
Ибо сейчас код такой:
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){
console.log(data);
}
});
И все выводится и работает классно. До этого все было так:
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 = data;
}
});
console.log(U);
И выводился пустой массив. Что я не так с переменными и их объявлением тогда делаю не так? P.S. Всем спасибо кто участвовал в обсуждении. |
Во втором случае ajax и console.log, это асинхронные события, вывод в консоль не будет ожидать когда завершится ajax запрос, а значит выводить будет пустой массив. В первом случае же, получили и вывод в консоль по ответу сервера.
|
| Часовой пояс GMT +3, время: 18:26. |