1

概述

我正在构建一个 Kynetx 规则集,它将在页面上找到一堆 Facebook id,然后使用 Kynetx Facebook 模块获取与该 Facebook id 关联的 Facebook 头像。我有在页面上创建 Facebook id 数组的 JS,我可以在 KRL 中处理一个数组以检索 Facebook 头像。我没有的是如何在 KRL 中从客户端到服务器端获取数组。

如何从 KRL 的客户端获取阵列到服务器端?

4

3 回答 3

2

您可以获取一个 JavaScript 数组并将其转换为字符串,如果您在 KRL 的服务器端对其进行解码,它将起作用。

示例应用代码 => https://gist.github.com/722536

示例应用程序书签 => 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/上的书签运行应用程序的结果 运行应用程序的结果

于 2010-11-30T22:32:16.070 回答
1

回答

不幸的是,KRL JS 运行时还不支持将数组发送到服务器端。不过,有一种方法可以完成您想做的事情。

例子

我构建了一个示例应用程序,该应用程序在此页面上运行,带有一个小书签,该小书签获取标记问题的标签并将它们发送到服务器进行处理,然后它们会返回。

示例应用代码=> https://gist.github.com/707561

示例应用程序书签=> http://mikegrace.s3.amazonaws.com/forums/stack-overflow/client-side-array-to-server-bookmarklet.html

代码示例的逐步说明

  1. 收集 JS 数组中的文本
  2. 将数组转换为 csv 字符串并附加逗号以使正则表达式拆分更容易
  3. 使用 csv 字符串向 KNS 提出事件
  4. 流程规则拉出第一个值
  5. 其余值保存到新变量
  6. 第一个值进入通知
  7. postlude 将剩余的值发送给自己
  8. 循环直到完成并将指令返回给浏览器

从书签运行应用程序的结果:

从书签运行应用程序的结果

于 2010-11-20T02:57:58.607 回答
1

如果你 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 上运行的结果

替代文字

于 2010-12-01T23:24:09.940 回答