试图封装$.getJSON和RequireJS

trying to encapsulate $.getJSON and RequireJS

本文关键字:RequireJS getJSON 封装      更新时间:2023-09-26

我有两个javascript文件:

services.js

define(['jquery'], function($){
    return {
        get: function (url, data) {
            return $.getJSON(apiUrl + url, data);
        },
    };
});

和main.js

define(['jquery', 'Service'], function($, sv){
    self.start = function () {
        var data = { project: 'myproject' };
        return sv.get('server.php', data, function(result) {
            alert("here");
        });
    },  
});

当数据被注释为// var data = { project: 'myproject' };

alert("here");起作用,否则就不起作用。

服务器总是回答相同的问题。

我不明白为什么它不起作用。

p.S如果我用这种方式发送,它会起作用(但我不想用那种方式):

return sv.get('server.php?project=myproject', data, function(result) {

有什么想法吗?

您需要将get函数更改为:

get: function (url, data, success) {
  return $.getJSON(apiUrl + url, data, success);
}

从而将回调传递给$.getJSON。当你评论var data = { project: 'myproject' };时,你说它有效。我猜,当你推荐它时,你也会把你的呼叫改为.get,如下所示:

return sv.get('server.php', function(result) {
  alert("here");
});

这使得.get的第二个参数是回调,然后将其作为data传递给$.getJSON,根据文档,这是完全有效的。当您这样做时,它会起作用,因为您已经传递了回调,而当您将data作为第二个参数时,第三个参数会在原始代码中丢失。我上面建议的修改保留了所有3个论点。

只需更新get函数并添加第三个参数进行回调,如下所示:

define(['jquery'], function($){
    return {
        get: function (url, data, callback) {
            return $.getJSON(apiUrl + url, data, callback);
        },
    };
});