Наличие сценария, обеспечивающего логический ответ на метод jQuery .load () - PullRequest
1 голос
/ 15 июля 2010

Быстрый вопрос, возможно, более умозрительного характера. В последнее время я увлекаюсь jquery, чтобы обрабатывать все Ajax в моих веб-приложениях.

Сейчас я строю систему ставок на PHP, которая интенсивно использует mod_rewrite. Я использую jQuery с диалоговым окном подтверждения, чтобы отправить запрос Ajax, который потратит часть предопределенных кредитов пользователя на ставку. Ajax-запрос на оплату отправляется со стоимостью в качестве параметра post на контроллер PHP, который тратит кредиты пользователей и затем выводит выходные данные, которые затем jQuery помещает обратно в документ.

Работает нормально, но мне интересно, есть ли лучший способ заставить jQuery обрабатывать отказ от покупки, если у пользователя недостаточно кредитов. Прямо сейчас у меня есть php, отвечающий эхом, который отображает это сообщение со ссылкой на страницу внесения депозита ... но я бы предпочел, чтобы перенаправление происходило автоматически.

Есть ли какой-нибудь способ, с помощью которого мой jQuery-сценарий может быть уведомлен с логическим значением успеха или сбоя до завершения работы .load, а затем перенаправлен в случае сбоя? Возможно, через HTTP-заголовки, определяющие обработку? Единственный способ, о котором я могу подумать, это поместить true или false в элемент html, который получает проверку в обратном вызове после .load () и в случае false выполняет перенаправление.

Спасибо и простите за пояснение.

Ответы [ 3 ]

2 голосов
/ 15 июля 2010

Если каждая попытка торгов требует перехода в другое место, зачем вообще использовать AJAX?

В любом случае, если вы посмотрите на документацию API jQuery , вы увидите, что load ()не единственная доступная функция.Большинство из них являются упрощенными версиями ajax () ;если вы используете этот, вы можете контролировать все возможные события прямо оттуда.Не нужно связываться с заголовками HTTP!

Я предлагаю вам перепроектировать серверный скрипт, чтобы он возвращал объект JSON.Затем вы можете отправить обратно все различные типы ответов:

{
    biddingSuccessful: true,
    linkToDepositPage: "http://example.com",
    textToDisplay: "Your bidding was successful"
}
1 голос
/ 15 июля 2010

Используйте вызов нижнего уровня $.ajax, чтобы полностью контролировать запрос.В идеале, вместо отправки успешного ответа 2xx, отправьте ответ об ошибке, который будет автоматически отправлен на ваш обратный вызов ошибки.

$.ajax({
    url: '..',
    success: function() {
        // if it gets here, then assume credits were used
    },
    error: function() {
        // some error happened
        // if error was about insufficient funds, then redirect
    }
});

С сервера отправьте успешный ответ, как вы делаете сейчас.Однако для ошибок измените заголовок ответа и отправьте объект JSON или простой текст, указывающий, в чем заключалась ошибка.И есть заголовок именно для того, что вы ищете.Это 402 - Payment Required:)

header('HTTP/1.1 402 Payment Required');

отправить объект JSON в качестве ответа с более подробной информацией:

{
    status: 'error',
    reason: 'Insufficient Funds',
    balance: '$2.78',
    amountRequested: '$3.50'
}

Для обновленного комментария необходимо использоватьзамыкание (лучше, чем глобальные переменные :) Предположим, что внешняя функция получает имя / идентификатор элемента и переносит это значение через замыкание в обратном вызове успеха.Пожалуйста, дайте мне знать, если это не то, что вы хотели.

function makeAJAXCall(elementName) {
    $.ajax({
        success: function(...) {
            // elementName is available here through a closure
            alert(elementName);
        }
    });    
}
0 голосов
/ 15 июля 2010

если функция обратного вызова похожа на «function (data) {», то вы можете вернуть «NSF» или что-то в этом роде и просто сравнить «data» с «NSF» и выполнить перенаправление с помощью window.location

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...