Обрабатывать клиентский массив в KRL, поднятый в приложение Kynetx - PullRequest
1 голос
/ 20 ноября 2010

Обзор

Я работаю над созданием набора правил Kynetx, который найдет несколько идентификаторов Facebook на странице, а затем использует модуль Kynetx Facebook, чтобы связать аватар Facebook с этим идентификатором Facebook. У меня есть JS, который создает массив идентификаторов Facebook на странице, и я могу обработать массив в KRL для получения аватаров Facebook. Чего у меня нет, так это как получить массив со стороны клиента на сторону сервера в KRL.

Как я могу получить массив со стороны клиента на серверную часть KRL?

Ответы [ 3 ]

2 голосов
/ 01 декабря 2010

Вы можете взять массив JavaScript и преобразовать его в строку, и он будет работать, если вы декодируете его на стороне сервера KRL.

Пример кода приложения => https://gist.github.com/722536

Пример приложения bookmarklet => http://mikegrace.s3.amazonaws.com/forums/stack-overflow/send-array-to-kns-dev-bookmarklet.html

ruleset a60x442 {
  meta {
    name "array-passing-test"
    description <<
      array-passing-test
    >>
    author "Mike Grace"
    logging on
  }

  rule start_your_engines {
    select when pageview ".*"
    {
      notify("Running","...sending array to KNS") with sticky = true;
      emit <|
        app = KOBJ.get_application("a60x442");
        var numbers = [1,2,3,4,5];
        nums = JSON.stringify(numbers);
        app.raise_event("process_array", {"numbers":nums});
        $K("div.KOBJ_message").append("<br/>"+nums);
      |>;
    }
  }

  rule process_array {
    select when web process_array
    foreach event:param("numbers").decode() setting (number)
    {
      notify("number",number) with sticky = true;
    }
  }
}

Результаты запуска приложения из букмарклета на http://example.com/ results of running app

1 голос
/ 02 декабря 2010

Вы также можете создавать массивы хэшей, если вы JSON.stringify массив хэшей.

Пример приложения:

ruleset a60x449 {
  meta {
    name "pass-hash-in-web-event-test"
    description <<
      pass-hash-in-web-event-test
    >>
    author "Mike Grace"
    logging on
  }

  rule start_this_party {
    select when pageview ".*"
    {
      notify("Now running","Building arrays to send to KNS") with sticky = true;
      emit <|
        var data = {};
        data.userData = JSON.stringify(
          [
            {"name":"MikeGrace","id":234232344},
            {"name":"TelegramSam","id":234089790234},
            {"name":"Alex","id":2300234234234}
          ]
        );
        app = KOBJ.get_application("a60x449");
        app.raise_event("process_me_data", data);
      |>;
    }
  }

  rule process_arrays_of_data {
    select when web process_me_data
    foreach event:param("userData").decode() setting (user)
    pre {
      userName = user.pick("$.name");
      userId = user.pick("$.id");
      output =<<
        <p>
          userName: #{userName}<br/>
          userId: #{userId}<br/>
        </p>
      >>;
    }
    {
      append("body", output);
    }
  }
}

Результаты выполненияна example.com

alt text

1 голос
/ 20 ноября 2010

Ответ

К сожалению, среда выполнения JS KRL еще не поддерживает отправку массивов на сторону сервера.Хотя есть способ выполнить то, что вы хотите сделать.

Пример

Я создал пример приложения, которое запускается на этой странице, с букмарклетом, который получает теги, помеченные вопросом.и отправляет их на сервер для обработки, а затем они возвращаются.

Пример кода приложения => https://gist.github.com/707561

Пример приложения bookmarklet => http://mikegrace.s3.amazonaws.com/forums/stack-overflow/client-side-array-to-server-bookmarklet.html

Пошаговое объяснение примера кода

  1. сбор текста в массиве JS
  2. преобразование массива в строку csv и добавление запятой для разделения регулярных выраженийпроще
  3. поднять событие в KNS с помощью строки csv
  4. правило процесса извлекает первое значение из
  5. остальные значения сохраняются в новой переменной
  6. первое значениеотправляется в уведомление
  7. postlude отправляет оставшиеся значения себе
  8. циклов до завершения и возвращает директивы обратно в браузер

Результаты запуска приложения из букмарклета:

results of running app from bookmarklet

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...