Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Преобразовать объект в массив (https://javascript.ru/forum/dom-window/76316-preobrazovat-obekt-v-massiv.html)

SolomonRei 27.12.2018 20:17

Преобразовать объект в массив
 
Есть объект,который возвращается путем ajax запроса.

Простенький скрипт,но в последующем,массив буду получать из бд.
session_start();
if($_POST['j'] == $_SESSION['g']) {
	$array = [4, 8, 10, 12];
	$array = json_encode($array);
	print_r($array);
}else echo '0';


setInterval(function(){
 		$.ajax({
                url: 'ajax.php',
                type: "POST",
                data: {j:'<?=$hash?>'},
                dataType: "json",
                success: function(result) {
                	if(result == 0) alert('unexpected error');
                	else {
                		var res = Array.from(result);
                		if($.inArray(0, res)) alert(5);
                		
                	}
                }
            });

 	}, 3000);


Вот,что я пытаюсь сделать,но он работает некорректно, на элемент 0,он выводит,что есть,а на самом деле нет элемента со значением 0.Как это исправить.

Пробовал так преобразовать массив,то же самое
var res = Object.keys(result).map(function(key) {
  							return [Number(key), result[key]];
						});

laimas 27.12.2018 20:18

Цитата:

Сообщение от SolomonRei
print_r($array);

Это для кого?

SolomonRei 27.12.2018 20:29

Цитата:

Сообщение от laimas (Сообщение 501102)
Это для кого?

Чтобы получить значение ответа.Потому что return не работает

laimas 27.12.2018 20:42

Цитата:

Сообщение от SolomonRei
Чтобы получить значение ответа.Потому что return не работает

return, это выход из функции, а json, это строка, а не массив, print_r для ее вывода совсем не нужна. Более того, если и требуется таким образом передать клиенту структуру массива, то нужно перехватывать вывод и только потом отдавать клиенту - echo print_r($array, true).

А json нужно отдавать как echo (для предотвращения неконтролируемого вывода до и после передачи json, лучше так exit(json)), то есть:

if($_POST['j'] == $_SESSION['g']) {
    $array = [4, 8, 10, 12];
    $array = json_encode($array);
    echo $array;
}


else echo '0'; - это глупость, так как не является JSON, которое предписано принять клиенту. В этом случае result на клиенте будет пуста, так работает jQuery. То есть это

if(result == 0) alert('unexpected error');
else {
var res = Array.from(result);
if($.inArray(0, res)) alert(5);
}

лишено всякого смысла - если json валидный, то result и будет массивом [4, 8, 10, 12].

SolomonRei 27.12.2018 20:44

ясно,спасибо


Часовой пояс GMT +3, время: 07:31.