扩展jQuery的$ .post()函数
问题描述:
我一直在使用jQuery一段时间,但我从来没有得到太高级。
如何扩展$ .post()函数以添加自己的功能?
我现在有兴趣添加的主要内容是一些$ .log()调用,所以我可以看到iPad上发生了什么,但我也会对某些“加载”图标感兴趣,也可能在看一些缓存。
答
对于加载图标,请查看.ajaxStart()和.ajaxStop()。
要定义在任何$.post()
之后采取的通用操作,您可能不需要做任何事情。只需使用$.ajaxSetup()即可定义成功/错误处理程序,以在每个请求之后执行日志记录,以及每个特定$.post()
注册的处理程序。
此外,有关在iPad上进行调试,请查看JSConsole。在您无法使用浏览器内调试工具(如移动开发)的设备上调试JavaScript时,它非常有帮助。
答
我用jQuery $ .ajax方法做了类似的事情。我jQuery对象上创建新的*方法:
$.extend({ myAjax: function(options) {
// code I want to run before the jQuery AJAX,
// I can access and alter the options passed in
var jqXHR = $.ajax(myAjax);
// code I want to run after the jQuery AJAX
// I can also run jQuery deferred code, e.g: jqXHR.done(function() { something });
});
您可以然后通过调用这个:
var options = {
url: "http://example.com",
type: "GET",
dataType: "JSONP"
}
$.myAjax(options);
我在哪里我的包裹围绕jQuery的AJAX功能的附加功能。这使我可以选择使用扩展函数还是回退到基本的jQuery函数。它还确保与插件,现有代码等的兼容性。
我知道我不应该缓存帖子,我会继承100KLOC内联网,并且他们希望为iPad优化它。重构所有后端代码以查找GET而不是POST - 然后进行测试 - 不在我的时间限制内。 – 2011-05-26 01:02:53