我写的网站有几个类别,必须从mongo数据库中提取数据。到目前为止,我已经编写了计划ajax调用,但由于这个要求需要我继续使用相同的ajax调用各种各样的东西,我已经开始考虑可重用的代码/模式。我是Javascript模块模式的新手,但到目前为止,我阅读和理解的内容,看起来像Revealing模块模式对我来说可能是一个良好的开端,而不是与其他面向对象的东西混淆太多。
我知道在SOF和互联网上有很多链接,文档可用,但我真的无法直接回答我的简单要求,所以我将它带到了理解的下一个层次。
我在这里写了一个测试代码......
var myApp = new function () {
var Var1 = [];
getData = function (sendData) {
return $.ajax({
type: "POST",
url: URL,
data: sendData,
datatype: "json",
success: function (results) {}
});
};
getOffers = function (sendData) {
getData(sendData);
};
return {
getOffers: getOffers
};
}();
getData保持私有以从数据库中提取记录,getOffers是公共的,可以从外部调用,据我所知。但是,如何让我的ajax调用成功返回?
我想要实现的是一种简单的方法来调用我的函数,如下所示..
myApp.getOffers({
'showData': 1,
'myLocation': "Location1",
'clientID': "Client1"
});
myApp.getOffers({
'showData': 1,
'myLocation': "Location2",
'clientID': "Client2"
});
从我的mongodb获取数据,以便我可以根据我的要求更改它们。它们中的每一个在返回值时,我都会操纵它们在差异Div中显示它们,以便动作需要超出我的定义,因为它们不是静态的。
我是如何实现它的,因为当我直接从函数返回一些东西时它起作用但是当它必须从ajax返回时它不会由于我必须编写的回调。但这是如何编写的,以便我们可以重用代码并用最简单的方法改变各种字段的发送?
请更改此代码,以便我更好地理解它,并从一些非常基本的东西开始,以满足我的要求。或者发给我一些真正解释我的基础知识的链接。
另外,我坚持使用ajax" POST" myApp的方法我认为是因为当一个" GET"使用方法,用户知道我传递的变量(来自其源代码)可以直接将它们发送为action.php?variable = 1& variable = 2。如果我可以安全地使用GET方法,我该如何避免呢?
答案 0 :(得分:3)
但是,我如何在他们之外获得我的ajax调用的成功回报?
让getOffers
返回jqXHR getData
返回,如下所示 -
var myApp = (function () {
var Var1 = [];
var getData = function (sendData) {
return $.ajax({
type: "POST",
url: URL,
data: sendData,
datatype: "json",
success: function (results) {}
});
};
var getOffers = function (sendData) {
// return the jqXHR returned by getData
return getData(sendData);
};
return {
getOffers: getOffers
};
})();
jqXHR
返回的$.ajax({})
对象为Promise
-
当您获得Ajax请求的成功响应时 - 您可以在ajax请求之外附加这样的成功处理程序
myApp.getOffers({
'showData': 1,
'myLocation': "Location1",
'clientID': "Client1"
}).done(function (data, textStatus, jqXHR) {
// work with DOM here
});
有关Jquery Deferreds / Promises here -
的更多信息此外,您在宣言期间遗漏了getData
,使getOffers
,var
全球化。
根据您对使用POST
而不是GET
的评论,一般的经验法则是 - GET
用于检索数据,POST用于保存 - 只是因为您使用{{ 1}}这并不意味着某些人无法嗅探您发送的数据,它只是请求正文的一部分而不是请求URL。如果您认为发送的数据非常敏感,则应考虑为您的应用启用POST
。