概述
我正在构建一个 Kynetx 规则集,它将在页面上找到一堆 Facebook id,然后使用 Kynetx Facebook 模块获取与该 Facebook id 关联的 Facebook 头像。我有在页面上创建 Facebook id 数组的 JS,我可以在 KRL 中处理一个数组以检索 Facebook 头像。我没有的是如何在 KRL 中从客户端到服务器端获取数组。
如何从 KRL 的客户端获取阵列到服务器端?
概述
我正在构建一个 Kynetx 规则集,它将在页面上找到一堆 Facebook id,然后使用 Kynetx Facebook 模块获取与该 Facebook id 关联的 Facebook 头像。我有在页面上创建 Facebook id 数组的 JS,我可以在 KRL 中处理一个数组以检索 Facebook 头像。我没有的是如何在 KRL 中从客户端到服务器端获取数组。
如何从 KRL 的客户端获取阵列到服务器端?
您可以获取一个 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/上的书签运行应用程序的结果
不幸的是,KRL JS 运行时还不支持将数组发送到服务器端。不过,有一种方法可以完成您想做的事情。
我构建了一个示例应用程序,该应用程序在此页面上运行,带有一个小书签,该小书签获取标记问题的标签并将它们发送到服务器进行处理,然后它们会返回。
示例应用代码=> https://gist.github.com/707561
示例应用程序书签=> http://mikegrace.s3.amazonaws.com/forums/stack-overflow/client-side-array-to-server-bookmarklet.html
代码示例的逐步说明
从书签运行应用程序的结果:
如果你 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 上运行的结果