使用Ajax回调的Javascript模块模式

时间:2014-06-08 06:13:15

标签: javascript php jquery mongodb

我写的网站有几个类别,必须从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方法,我该如何避免呢?

1 个答案:

答案 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,使getOffersvar全球化。

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

相关问题