带有Ajax回调的Javascript模块模式

带有Ajax回调的Javascript模块模式,javascript,php,jquery,mongodb,Javascript,Php,Jquery,Mongodb,我写了一个网站,有几个类别的数据必须从mongo数据库中提取。到目前为止,我已经编写了plan ajax调用,但由于这一需求需要我在各种事情上继续使用相同的ajax调用,我开始考虑可重用代码/模式。我是Javascript模块模式的新手,但到目前为止,我所阅读和理解的内容似乎对我来说,揭示模块模式可能是一个很好的开始,而不是对其他面向对象的东西太过困惑 我知道在软件和互联网上有很多链接和文档,但我真的无法直接回答我的简单需求,所以我用我理解的东西把它带到下一个层次 我在这里写了一个测试代码 va

我写了一个网站,有几个类别的数据必须从mongo数据库中提取。到目前为止,我已经编写了plan ajax调用,但由于这一需求需要我在各种事情上继续使用相同的ajax调用,我开始考虑可重用代码/模式。我是Javascript模块模式的新手,但到目前为止,我所阅读和理解的内容似乎对我来说,揭示模块模式可能是一个很好的开始,而不是对其他面向对象的东西太过困惑

我知道在软件和互联网上有很多链接和文档,但我真的无法直接回答我的简单需求,所以我用我理解的东西把它带到下一个层次

我在这里写了一个测试代码

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?variable=1&variable=2发送。如果我可以安全地使用GET方法,我如何避免它

但是,如何在它们之外获得ajax调用的成功回报呢

Make
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延期/承诺的更多信息-

另外,在声明过程中,由于前面缺少
var
,您将
getData
getOffers
设置为全局


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

getOffers()
还需要从
getData()
返回返回值,以保证返回到你试图使用它的地方。@jfriend00是,更新了我的答案,让我的答案更加清晰-谢谢Hanks@JohnbabuKoppolu,这很有效。我现在理解了jqXHR方法,虽然我听说了这个需求的承诺和回调,但我就是不能让它以我想要的方式工作,首先。这很有帮助。有人知道选择GET vs.POST方法的答案吗?我们如何避免任何人在不通过前端脚本的情况下通过“GET”调用后端脚本来检索数据?很好的解决方案,谢谢!实际上,您根本不需要getOffers()函数,只需返回{getOffers:getData},因为getData已经返回了jqXHR对象。