Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.08.2013, 16:50
Интересующийся
Отправить личное сообщение для strongest Посмотреть профиль Найти все сообщения от strongest
 
Регистрация: 18.08.2013
Сообщений: 10

Получить данные JSON без jQUERY
Здравствуйте.

Как получить данные формата json по определенному url без использования jQuery?

Сами данные генерируются и выдаются в виде массива объектов по заданному url. Вот его структура:
[{"product_name":"\u0411\/\u0443 \u0414\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044c Fiat Doblo 1.9 JTD","product_id":"3","prices":45,"images":["images\/stories\/virtuemart\/product\/doblo-1.9-jtd.jpg","images\/stories\/virtuemart\/product\/fiat-doblo-1.92.jpg"]},{"product_name":"\u0411\u0430\u043c\u043f\u0435\u0440\u044b Ford Fiesta","product_id":"4","prices":58,"images":["images\/stories\/virtuemart\/product\/01-perednyi-bamper-fiesta-2003-2006.jpg","images\/stories\/virtuemart\/product\/02-perednyi-bamper-fiesta-2008.jpg","images\/stories\/virtuemart\/product\/03-zadnyyi-bamper-fiesta-2006-2008.jpg"],"product_desc":"\u0415\u0441\u0442\u044c\u00a0\u0411\u0430\u043c\u043f\u0435\u0440\u044b \u0434\u043b\u044f Ford Fiesta, \u043f\u0435\u0440\u0435\u0434\u043d\u0438\u0439, \u0437\u0430\u0434\u043d\u0438\u0439. 2003-2008 \u0433\u043e\u0434."}]

Этот массив хочу получить в js и по очереди каждый элемент заполнить на другом сайте. Заполнить данные по форме, нажать кнопку сабмит и опять открыть страницу формы, заполнить ну т.д

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

var request = new XMLHttpRequest();
request.open('GET', 'путь/до/json.json');
request.onreadystatechange = function(e) {
    if (this.readyState = 4) {
        if (this.status == 200) {
            var response = JSON.parse(this.responseText);
            // тут ченибудь делаем с объектом
        }
        else {
            // тут сообщаем о сетевой ошибке
        }
    }
}
request.send(null);
Ответить с цитированием
  #3 (permalink)  
Старый 19.08.2013, 00:56
Интересующийся
Отправить личное сообщение для strongest Посмотреть профиль Найти все сообщения от strongest
 
Регистрация: 18.08.2013
Сообщений: 10

Сообщение от danik.js Посмотреть сообщение
var request = new XMLHttpRequest();
request.open('GET', 'путь/до/json.json');
request.onreadystatechange = function(e) {
    if (this.readyState = 4) {
        if (this.status == 200) {
            var response = JSON.parse(this.responseText);
            // тут ченибудь делаем с объектом
        }
        else {
            // тут сообщаем о сетевой ошибке
        }
    }
}
request.send(null);
Спасибо. Однако в строчке
if (this.readyState = 4)
я добавил еще одно "=" иначе ругается на ошибку "uncaught syntaxerror unexpected end of input repeated 2 items". Буду теперь пробовать дальше двигаться. О своих результатах сообщу позже когда сделаю уже то что в финальном результате будет.
Ответить с цитированием
  #4 (permalink)  
Старый 19.08.2013, 11:34
Интересующийся
Отправить личное сообщение для strongest Посмотреть профиль Найти все сообщения от strongest
 
Регистрация: 18.08.2013
Сообщений: 10

Подскажите еще такое:
после клика нужно дождаться загрузки элементов. Как выполнить ожидание без установки таймера?
Ответить с цитированием
  #5 (permalink)  
Старый 19.08.2013, 13:33
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от strongest
Как выполнить ожидание без установки таймера?
Не нужны никакие таймеры. Когда браузер получит ответ от сервера, произойдет событие onreadystatechange.
Ответить с цитированием
  #6 (permalink)  
Старый 19.08.2013, 14:08
Интересующийся
Отправить личное сообщение для strongest Посмотреть профиль Найти все сообщения от strongest
 
Регистрация: 18.08.2013
Сообщений: 10

У меня так не получается. Не находит элемент который не загрузился еще.

С таймером работает в норме но мне не хочется его использовать т.к это замедляет общий процесс и не факт что за этот период времени уложится загрузка.

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

Последний раз редактировалось strongest, 19.08.2013 в 14:16.
Ответить с цитированием
  #7 (permalink)  
Старый 19.08.2013, 14:17
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Код показывай.
Ответить с цитированием
  #8 (permalink)  
Старый 19.08.2013, 14:29
Интересующийся
Отправить личное сообщение для strongest Посмотреть профиль Найти все сообщения от strongest
 
Регистрация: 18.08.2013
Сообщений: 10

console.log("Start");
var request = new XMLHttpRequest();
request.open('GET', 'http://localhost/avtokolya/market/l_json.php');
request.onreadystatechange = function(e) {
if (this.readyState == 4) {
    if (this.status == 200) {
    var response = JSON.parse(this.responseText);
   	var str = response['1'];
	//alert(str.images);
		if ('http://slando.ua/post-new-ad/'==window.location.href){
		console.log("slando");
		window.onload = function(){
		//document.getElementById("category-breadcrumb-container").addEventListener( 'click');

 		var element = document.evaluate( '//*[@id="category-breadcrumb-container"]/dl/dt/a',document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue;
		element.click();
        // первый аргумент - функция
		function second_passed() {
         document.getElementById('cat-3').click();
  		var element = document.evaluate( '//*[@id="category-3"]/div[2]/div[2]/div/ul/li[7]/a',document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue;
		element.click();
		var element = document.evaluate( '//*[@id="category-111"]/div[2]/div[2]/div/ul/li[1]/a',document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue;
		element.click();

		var element = document.evaluate( '//*[@id="targetid_private_business"]/dd/ul/li[3]/a',document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue;
		element.click();
		}
setTimeout(second_passed, 2000)
        		//slando
		document.getElementById('add-title').value=str.product_name;
		document.getElementById('add-description').value=str.product_desc;
		}
	}
  }
		  	else {alert("Сетевая ошибка...");
		  		 }
 }
}
request.send(null);


console.log("end");
Ответить с цитированием
  #9 (permalink)  
Старый 19.08.2013, 14:49
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от strongest
На сайте заполняю форму, при выборе категории выполняется клик, начинает подгружаться список категорий и уже с загруженного списка мне нужно выбрать элементы.
А где код подгрузки списка категорий то? На самой странице? Это экстеншн? А в extension API нет разве способа перехватывать http-запросы?
Ответить с цитированием
  #10 (permalink)  
Старый 19.08.2013, 15:02
Интересующийся
Отправить личное сообщение для strongest Посмотреть профиль Найти все сообщения от strongest
 
Регистрация: 18.08.2013
Сообщений: 10

Код подгрузки категорий находится на самом сайте, можете посмотреть сами. Или может я не правильно понял вас?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
КАк отправлять данные компьютера на сервер и наоборот, но без браузера (!!!) ? name123123 Общие вопросы Javascript 1 01.04.2013 20:50
JQuery как получить url? Memfis jQuery 8 29.07.2011 01:39
Как правильно получить введенные данные в поле? buket jQuery 11 11.04.2010 19:59
Jquery, Dynatree и JSON antirek jQuery 6 01.09.2009 15:00
как сделать аналог jquery.load без jquery? vvsh AJAX и COMET 5 05.06.2009 22:40