Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.10.2014, 12:09
Аватар для psfdek
Профессор
Отправить личное сообщение для psfdek Посмотреть профиль Найти все сообщения от psfdek
 
Регистрация: 14.02.2014
Сообщений: 157

Обработка 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

Последний раз редактировалось psfdek, 23.10.2014 в 12:12.
Ответить с цитированием
  #2 (permalink)  
Старый 23.10.2014, 12:19
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

А где ты вычитал что new Array() умеет парсить JSON?
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #3 (permalink)  
Старый 23.10.2014, 12:20
Аватар для psfdek
Профессор
Отправить личное сообщение для psfdek Посмотреть профиль Найти все сообщения от psfdek
 
Регистрация: 14.02.2014
Сообщений: 157

я думал что строка же типа массива и оно её типо поймет
а как тогда обработать это?
Или как то по другому надо вывести из php?
Лучше конечно через json, но я хз как это принять...
Ответить с цитированием
  #4 (permalink)  
Старый 23.10.2014, 12:23
Аватар для psfdek
Профессор
Отправить личное сообщение для psfdek Посмотреть профиль Найти все сообщения от psfdek
 
Регистрация: 14.02.2014
Сообщений: 157

Всё. Ваша подсказка натолкнула меня на выход
var rJSON =JSON.parse(reqString.responseText);
Ответить с цитированием
  #5 (permalink)  
Старый 23.10.2014, 12:26
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

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

Сообщение от psfdek
Лучше конечно через json
Что значит "лучше"? У тя че, варианты есть?
var response = JSON.parse(responseText);
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #6 (permalink)  
Старый 23.10.2014, 12:31
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

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

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

в цикле будет перебирать все 100500.
Ответить с цитированием
  #7 (permalink)  
Старый 23.10.2014, 12:38
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

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

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



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
JSON массив, разбор и обработка. aj-nik Общие вопросы Javascript 2 10.10.2014 18:51
Обработка JSON в JS devastor AJAX и COMET 2 16.09.2014 07:36
Обработка json tion Общие вопросы Javascript 15 12.05.2013 18:39
Обработка JSON menangen AJAX и COMET 0 14.05.2011 16:54
jQuery. Обработка ошибок и JSON. mma_mma jQuery 3 19.07.2010 12:10