使用Ajax回调的Javascript模块模式

我写了一个网站,其中有几个类别,必须从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获取数据,以便我可以根据我的要求改变它们。 当它们返回值时,我会操纵它们在diff Div中显示它们,以便动作需要超出我的定义,因为它们不是静态的。

我是如何实现它的,因为当我直接从函数返回一些内容时它可以工作但是当它必须从ajax返回时它不会由于我必须编写的回调。 但这是如何编写的,以便我们可以重用代码并用最简单的方法改变发送各种字段?

请更改此代码,以便我更好地理解它,并从一些非常基本的东西开始,以满足我的要求。 或者发给我一些真正解释我基本知识的链接。

另外,我坚持使用myApp的ajax“POST”方法,原因我认为当使用“GET”方法时,用户知道我传递的变量(来自其源代码)可以直接将它们作为action.php发送?变量= 1&变量= 2。 如果我可以安全地使用GET方法,我该如何避免它?

但是,我如何在他们之外获得我的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 }; })(); 

$.ajax({})返回的jqXHR对象是一个Promise – 当你获得Ajax请求的成功响应时 – 你可以附加一个这样的成功处理程序 – 在你的ajax请求之外

 myApp.getOffers({ 'showData': 1, 'myLocation': "Location1", 'clientID': "Client1" }).done(function (data, textStatus, jqXHR) { // work with DOM here }); 

更多关于Jquery Deferreds / Promises的信息 –

此外,您在声明期间通过在前面缺少var来创建getDatagetOffers全局。

根据你对使用POST而不是GET评论,一般的经验法则是GET用于检索数据,POST用于保存 – 只是因为你使用POST并不意味着某些人无法嗅探你发送的数据,它只是请求正文的一部分而不是请求URL。 如果您认为发送的数据非常敏感,则应考虑为您的应用启用SSL(HTTPS)