Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Получить данные JSON без jQUERY (https://javascript.ru/forum/css-html/40743-poluchit-dannye-json-bez-jquery.html)

strongest 18.08.2013 16:50

Получить данные 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 и по очереди каждый элемент заполнить на другом сайте. Заполнить данные по форме, нажать кнопку сабмит и опять открыть страницу формы, заполнить ну т.д

Помогите/подскажите как это реализовать?

danik.js 18.08.2013 18:04

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);

strongest 19.08.2013 00:56

Цитата:

Сообщение от danik.js (Сообщение 268044)
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". Буду теперь пробовать дальше двигаться. О своих результатах сообщу позже когда сделаю уже то что в финальном результате будет. :)

strongest 19.08.2013 11:34

Подскажите еще такое:
после клика нужно дождаться загрузки элементов. Как выполнить ожидание без установки таймера?

danik.js 19.08.2013 13:33

Цитата:

Сообщение от strongest
Как выполнить ожидание без установки таймера?

Не нужны никакие таймеры. Когда браузер получит ответ от сервера, произойдет событие onreadystatechange.

strongest 19.08.2013 14:08

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

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

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

danik.js 19.08.2013 14:17

Код показывай.

strongest 19.08.2013 14:29

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");

danik.js 19.08.2013 14:49

Цитата:

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

А где код подгрузки списка категорий то? На самой странице? Это экстеншн? А в extension API нет разве способа перехватывать http-запросы?

strongest 19.08.2013 15:02

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


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