试图封装 $.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);
},
};
});
我有两个 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);
},
};
});