【发布时间】:2011-08-12 09:42:48
【问题描述】:
我有一个大问题,不知道如何解决。
我需要返回值(主要是字符串)以在各种上下文中使用它们。例如,我需要在 if/else 语句中检查某些内容是 0 还是 1,或者在通过 JavaScript 将其解析到 DOM 之前在各种 html 元素中插入一个字符串。这是我正在寻找的简化示例:
<script>
function output() {
return "Hello world!";
}
function check() {
return 3;
}
(function() {
if(check() !== 5) {
$(someElement).set("html", "<p>" + output() + "</p>");
}
})();
</script>
现在让我们进入令人头疼的部分:在返回值之前,我需要从从后端加载内容的外部文件中的 JSON 上下文中请求它。我编写了一个包含 Request.JSON MooTools 类的类,以便更轻松地处理各种请求:
<script>
var backendCall = new Class({
Implements: Options,
options: {
url: "gateway/?contentType=application/json"
},
initialize: function(options) {
this.setOptions(options);
if(!instanceOf(this.options.prms, Array)) {
this.options.prms = [];
}
this.fire();
},
fire: function() {
new Request.JSON({
data: JSON.encode({
"methodName": this.options.req,
"parameters": this.options.prms,
"serviceName": this.options.srv
}),
onFailure: function() {
alert("JSON-Request failed.");
},
onSuccess: function(data) {
this.callback(data);
}.bind(this),
url: this.options.url
}).send();
},
callback: function(data) {
alert(data); // works
}
});
function request(req, srv) {
new backendCall({
req: req,
srv: srv
});
}
window.addEvent("load", function() {
/* is there a way to return the data string here?
or is it impossible? */
request("someValue", "demoTest");
});
</script>
在引用 JSON-Request 输出的回调函数内执行硬编码函数时,这非常有用。但我需要使这部分更具可变性,因为我想以不同的方式使用输出。有没有办法让回调只返回输出并将其引用到父 request() 函数以让它返回值?也许用.pass(数据)?欢迎任何想法!非常感谢! :)
【问题讨论】:
标签: javascript ajax mootools xmlhttprequest scope