试图封装$ .getJSON和RequireJS

时间:2015-03-24 13:54:10

标签: javascript jquery ajax 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");有效,否则不起作用。

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

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

如果我以这种方式发送它可行(但我不希望这样):

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

任何想法?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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