Jak*_*ake 12 javascript ajax jquery
听我说.我完全理解这段代码.
$.getJSON(someURL, function(data){
//do something with my data
})
.success(function () {
//Call what you want on success
})
Run Code Online (Sandbox Code Playgroud)
如果我只需要采取一个非常静态的动作,这似乎很好.但是,如果我想减少限制,例如这个怎么办?
function my_func(){
$.getJSON(someURL, function(data){
//do something with my data... like modify an array or the dom
})
}
Run Code Online (Sandbox Code Playgroud)
现在是司机
my_func();
//Now I want to call a function that relies on the data that my_func brought into the script.
Run Code Online (Sandbox Code Playgroud)
如果我想这样做,我编写脚本的方式有问题吗?或者我只是错过了一些很棒的内置方法?
Nik*_*iko 14
我看到两种可能的jQuery-ish方式.
第一个是使用另一个可以传递给的回调my_func:
function my_func(callback) {
$.getJSON(someUrl, function(data) {
// ...do stuff ...
if ($.isFunction(callback)) { callback(data); }
});
}
my_func(function(data) {
// ..do more stuff..
});
Run Code Online (Sandbox Code Playgroud)
第二种方法是创建一个内部触发的自定义事件,my_func并且可以从外部监听:
function my_func() {
$.getJSON(someUrl, function(data) {
$(document).triggerHandler('my_func:data-received', [data]);
});
}
$(document).on('my_func:data-received', function(event, data) {
// ...do stuff...
});
my_func();
Run Code Online (Sandbox Code Playgroud)
我强烈建议async: false只在绝对必要的情况下使用.
另一种(非常简洁的)处理方法是jQuery.Deferred对象:
function my_func() {
var d = new $.Deferred();
$.getJSON(someUrl, function(data) {
d.resolve(data);
});
return d;
}
my_func().done(function(data) {
// ...do stuff...
});
Run Code Online (Sandbox Code Playgroud)
您的函数返回一个允许注册回调的对象.在函数中,您只需要确保调用resolve以调用所有已注册的done回调处理程序.
| 归档时间: |
|
| 查看次数: |
8270 次 |
| 最近记录: |