Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Обработка JSON (https://javascript.ru/forum/dom-window/51068-obrabotka-json.html)

psfdek 23.10.2014 12:09

Обработка JSON
 
Проблема в обработке полученного json от php с помощью GetXMLHttpRequest
Если все делаю на одной странице то работает:

<?php
$nonsequential = array("type"=>"foo", "test"=>"bar", "test1"=>"baz", "test3"=>"blong");
$nonsequential=json_encode($nonsequential);
echo '<script type="text/javascript">';
echo 'people='.$nonsequential;

echo '</script>';
?>
<script>
  function test() {
	alert(people.type);
  }
</script>
<input id="test" type="button" value="Вывод данных" onclick="test()" />


А когда по ajax то не получается.
Пробовал по всякому. Сейчас сделал так что php возвращает ResponseText "{"type":"error","text":"11111"}" и затем я создаю массив с этими данными, но не пашет.



Вот всё:
function getXmlHttpRequest(){
	if(window.XMLHttpRequest)
		return new XMLHttpRequest();
	else
		return null;
}

//Получение и отправка параметров
function sendAjaxFunc(){
	var qFile = '/query.php'; //ссылка на исполняемый файл php (тип строка)
	//-Получение данных формы
		var val1 = document.getElementById('login_auth').value;
		var val2 = document.getElementById('passw').value;
		var val3 = document.getElementById("rememberme").checked
    //-//
	
	var reqStr =
	'query=query_login&'+
	'login='+val1+
	'&password='+val2+
	'&rememberme='+val3;
	
	getAjaxXML(reqStr,qFile);
}
//Обрабока параметров
function getAjaxXML(reqStr,qFile){
	var reqString = getXmlHttpRequest();
	reqString.onreadystatechange = function(){
			if(reqString.readyState != 4) return;{
				var rJSON = new Array(reqString.responseText);
				alert(rJSON.text);
			}
		};

	reqString.open('GET', '<?=baseurl?>'+qFile+'?'+reqStr, true);
	reqString.send(null);
}


PHP возвращает : {"type":"error","text":"11111"}

Мне алерт выдает undefined

danik.js 23.10.2014 12:19

А где ты вычитал что new Array() умеет парсить JSON?:D

psfdek 23.10.2014 12:20

я думал что строка же типа массива и оно её типо поймет :)
а как тогда обработать это?
Или как то по другому надо вывести из php?
Лучше конечно через json, но я хз как это принять...

psfdek 23.10.2014 12:23

Всё. Ваша подсказка натолкнула меня на выход :D
var rJSON =JSON.parse(reqString.responseText);

danik.js 23.10.2014 12:26

Цитата:

Сообщение от psfdek
я думал

Не надо думать. Надо читать документацию.
Цитата:

Сообщение от psfdek
что строка же типа массива

Не угадал ты. Это "типа" объекта строка. Массив это "[1, 2, 3]". И один же хрен Array() не парсит ниче.

Цитата:

Сообщение от psfdek
Лучше конечно через json

Что значит "лучше"? У тя че, варианты есть?
var response = JSON.parse(responseText);

kostyanet 23.10.2014 12:31

Просто в php эквипенисуально, там массивы сразу коллекции и по привычке можно так подумать и про js. Который если сделать вот так

arr[1]='odin';
arr[100500]='dohera';

в цикле будет перебирать все 100500.

kostyanet 23.10.2014 12:38

Кстати на обратном ходу json_decode() по умолчанию выдает stdClass. Я тоже думал будет Array и пять минут искал откуда у меня взялся stdClass в классовых дебрях. Оказалось надо было мануал почитать и воткнуть false вторым аргументом.

Обычно взад не дают, да, это частный случай чтения json из куков. Чтоб не парсить текст - жисон туда, жисон оттудова.


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