我正在为我的教授建立一个网站,并且我不想重复我的代码,因为我将失败。
我有以下.getJson调用,我想在多个位置使用,这样我就不必多余地重复代码了。
function GetJSON()
{
var a = $.getJSON("/controller_name/action", null, function (z) {})
.success(function (z) {
//Success Action
})
.error(function (z) {
//Error Action
})
.complete(function (z) {
//Complete Action
});
}
我可以传递成功,错误和完整事件的变量,但我认为这种方式有可能变得非常混乱。有没有办法设置它,以便我不必在我的网站上拥有相同的GetJSON函数。
答案 0 :(得分:2)
如果您的教授是最新的当前范例,您应该返回 a
($.getJSON
的返回值)。
这是一个延迟对象,您可以随时附加处理程序,而不必将它们附加到您自己的GetJSON()
函数中。
如果您有始终想要发生的常见操作,请将这些操作放在GetJSON()
函数中,并使用外部绑定处理程序执行唯一的操作:
function GetJSON()
{
var a = $.getJSON("/controller_name/action", null, function (z) {
...
});
// bind functions that you always want to happen here
a.fail(function(z) {
console.log("something bad happened");
});
return a;
}
var d = GetJSON();
// bind additional functions here
d.done(
// Success Action
})
.fail(function (z) {
// Error Action
})
.always(function (z) {
// Complete Action
});
请注意,jQuery 1.7已弃用.success
,.error
和.complete
以支持上面使用的函数,以便与其他Deferred对象保持一致。
答案 1 :(得分:1)
我不会说重复代码实际上是恕我直言(除非你做出相同的请求并且每次都更新相同的元素)。如果回调请求url每次都不同,那么实际上并不需要为它写一个'包装器'。
我将其视为“原生”功能的方式。例如。例如console.log()
。你不想写一个包裹着你的函数吗?
如果您确实需要/想要这样做,那么您只需将所有参数/回调传递给该函数。