试图封装 $.getJSON 和 RequireJS

trying to encapsulate $.getJSON and RequireJS

我有两个 javascript 文件:

service.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,这是完全有效的,根据 documentation .当你这样做时,它会起作用,因为你已经传递了回调,而当你将 data 作为第二个参数时,第三个参数会在你的原始代码中丢失。我在上面建议的修改保留了所有 3 个参数。

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

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