Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.08.2013, 13:23
Новичок на форуме
Отправить личное сообщение для devataatman Посмотреть профиль Найти все сообщения от devataatman
 
Регистрация: 13.11.2012
Сообщений: 4

Получить ajax данные от асинхронной функции
На странице запрашиваю данные аjaxом, но так как request выполняется асинхронно, то скрипт не возвращает данные а продолжает работу и возвращает пустой json, чуть позже результат simpleParser.images выводит в консоль.

Как я могу получить данные от simpleParser.images и отправить json?
Как я могу подписаться на событие когда simpleParser.images выполнится?


Есть роутер:

exports.index = function(req, res){

 if(req.param('name')) {

  var simpleParser = require('../tools/simpleParser');
  var result = simpleParser.images(req.param('name'));

  // Как здесь получить результат и отправить json?

  res.json(result);

 }
    
  res.render('goods');

};


Есть simpleParser.images :

module.exports = {
    images: function (url) {
        if (url) {

            var request = require('request'),
                 cheerio = require('cheerio');

            request({
                uri: url,
                method: 'GET',
                encoding: 'binary'
            }, function (err, res, body) {

                var tmp = [];

                body = new Buffer(body, 'binary');

                var $ = cheerio.load(body);

                $('.products-listing li a').each(function () {
                    var link = $(this).find('img').attr('src');
                    tmp.push(link);
                });
 
                console.log(tmp);

                // Как результат tmp передать в роутер?

            });

        } else {
            console.log('simpleParser: no url to parse');
            return false;
        }
    }
};
Ответить с цитированием
  #2 (permalink)  
Старый 04.08.2013, 16:35
Новичок на форуме
Отправить личное сообщение для devataatman Посмотреть профиль Найти все сообщения от devataatman
 
Регистрация: 13.11.2012
Сообщений: 4

Получил данные в роутере, передавая simpleParser.images еще и callback,
но res.json не срабатывает внутри функции callback в роутере, почему?

simpleParser.images(req.param('name'), function(data) {
      console.log('result is ' + data[0]);
      res.json('test');
});
Ответить с цитированием
  #3 (permalink)  
Старый 05.08.2013, 12:51
Аватар для deivan
Профессор
Отправить личное сообщение для deivan Посмотреть профиль Найти все сообщения от deivan
 
Регистрация: 02.08.2012
Сообщений: 293

Сообщение от devataatman Посмотреть сообщение
но res.json не срабатывает внутри функции callback в роутере, почему?
а JSON.parse() срабатывает?

(и желательно весь код приводить, не каждый догадается что у вас экспресс и т.д.)
Ответить с цитированием
  #4 (permalink)  
Старый 08.08.2013, 00:06
Новичок на форуме
Отправить личное сообщение для devataatman Посмотреть профиль Найти все сообщения от devataatman
 
Регистрация: 13.11.2012
Сообщений: 4

Подсказали почему не работал res.json, так как уже выполнялся res.render, и res.json после него не работает, взял в условие и все заработало.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить функцию JavaScript (PHP, AJAX, jQuery) Sinot jQuery 3 04.02.2013 13:32
Получить данные ajax запросом mue Общие вопросы Javascript 2 17.12.2012 12:49
Вернуть данные из ajax функции laandrew Общие вопросы Javascript 5 15.12.2012 16:44
ajax $.post вместо json проблема данные не приходят Sadist_dead AJAX и COMET 2 12.07.2012 17:59
Получить данные через AJAX и отобразить на странице skiller AJAX и COMET 2 17.06.2011 11:09