У меня есть веб-сайт с несколькими категориями, для которых данные нужно извлечь из базы данных монго. До сих пор я писал план 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, это не связано с обратным вызовом, который я должен написать. Но как это вообще написано, чтобы мы могли повторно использовать код и изменять отправку различных полей с помощью простейшего подхода?
Пожалуйста, измените этот код, чтобы я понял его лучше и начинал с чего-то очень элементарного, чтобы соответствовать моим требованиям. ИЛИ пришлите мне несколько ссылок, которые действительно объясняют мои основы.
Кроме того, я придерживаюсь метода ajax «POST» для myApp по какой-то причине, я думаю, что когда используется метод «GET», пользователи, знающие, какую переменную i pass (из исходного кода) могут напрямую отправлять их как 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 }; })();
Объект 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 здесь –
Также вы сделали getOffers
, getOffers
глобальным, не getOffers
var
во время объявления.
В соответствии с вашим комментарием об использовании POST
вместо GET
общее правило – GET
– для извлечения данных, POST для сохранения – только потому, что вы используете POST
что не означает, что кто-то не может нюхать данные, которые вы отправляете, это является частью тела запроса вместо URL-адреса запроса. Если вы считаете, что данные, которые вы отправляете, действительно чувствительны, вы должны изучить возможность включения SSL(HTTPS)
для вашего приложения.