与a previous question类似,我问过,我想知道A)如何将单个数据属性传递给服务器扩展,以及B)如何从内部访问这些数据属性服务器扩展源代码。作为侧边栏(并不一定是此问题的主要目的),是否可以从服务器扩展中返回一组FatFractal对象?我在客户端应用程序中使用FatFractal JavaScript SDK。
基本上,我正在创建一个简单的搜索实用程序,其中输入参数将传递给服务器扩展,服务器扩展将返回与搜索条件匹配的FFUser对象数组。
FFDL:
CREATE EXTENSION /SearchUsers AS javascript:require('scripts/Search').searchUsers();
应用程序JS代码:
function findUsers() {
if(!ff.loggedIn()) {
alert("You must be logged in to search for users.");
}
else {
var searchCriteria = $("#input-user-search").val();
// pass 'searchCriteria' to 'SearchUsers' extension
// acquire handle to 'matchedUsers' returned from 'SearchUsers'
...
}
}
服务器扩展JS代码:
var ff = require('ffef/FatFractal');
function searchUsers() {
var matchedUsers; // an array of FFUser objects
var searchInput; // the search criteria
// acquire handle to 'searchCriteria' passed from client app to assign to 'searchInput'
...
// return 'matchedUsers' to client app
}
...
exports.searchUsers = searchUsers;
同样,评论部分是我需要澄清的部分。其余的实现逻辑我相信我已经弄明白了。在此先感谢您的帮助!
答案 0 :(得分:2)
对于您的应用程序JS代码,您只需将数据作为URL查询参数传递:
var searchCriteria = $("#input-user-search").val();
// suitable validation and URL encoding ...
ff.getArrayFromExtension("/SeachUsers?search=" + searchCriteria,
function(result) {
// success
});
(请注意,你也可以使用通常的getArrayFromUri
函数,但在这种情况下你必须提供`/ ff / ext / SearchUsers'的完整扩展名。)
然后在您的扩展程序中,您需要先获取传入的参数:
var searchCriteria = ff.getExtensionRequestData().httpParameters['search'];
最后,设置结果:
var r = ff.response();
r.responseCode = 200;
r.result = matchedUsers;
请注意,您也可以使用postObjToExtension
函数,并将对象发布到您的扩展程序,但这可能对此方案而言过度。