Как настроить ColdFusion Model Glue 3, чтобы он не перенаправлял запросы AJAX? - PullRequest
3 голосов
/ 10 сентября 2011

У меня есть обработчик событий, настроенный так:

<event-handler name="action.product.delete">
    <broadcasts>
        <message="DeleteProduct"/>
    </broadcasts>
    <results>
        <result do="page.product.list" redirect="true"/>
    </results>
</event-handler>

Другими словами, удалите продукт, а затем перенаправьте пользователя обратно в список продуктов. Это событие будет вызвано из другого события page.product.delete, которое показывает страницу подтверждения удаления.

Теперь я пытаюсь использовать службу удаленного взаимодействия, которая была представлена ​​в Model Glue 3. Я пытаюсь отправить запрос AJAX POST:

$.ajax({
    url: 'RemotingService.cfc?method=executeevent&requestformat=json',
    data: {
        id: productId,
        eventName: 'action.iat.delete',
        returnValues: 'message'
    },
    type: 'POST'
});

Хотя это нормально работает с точки зрения удаления продукта, в итоге браузер отправит один запрос POST , получит перенаправление 302, а затем выполнит GET запрос сразу после этого. GET - это страница HTML, а не данные JSON.

Если я удалю redirect="true" из обработчика событий, AJAX будет работать правильно, но сгенерированный URL из не-AJAX-версии моей страницы не будет. В конечном итоге пользователь выполнит удаление и подтвердит его, а на странице action.product.delete отобразится страница page.product.list, но не будет изменен URL-адрес. Если пользователь добавит в закладки эту страницу, он будет добавлять в закладки action.product.delete!

Как настроить мое приложение так, чтобы оба они работали правильно, или мне придется вернуться к использованию удаленных вызовов процедур на CFC для обработки моего AJAX?

1 Ответ

2 голосов
/ 10 сентября 2011

Вы очень близки. Переменная requestFormat , которую вы уже используете, отличается тем, что ее можно использовать в качестве фильтра для широковещательных рассылок, представлений и результатов в обработчике событий Model-Glue 3. Значение по умолчанию для requestFormat равно html, поэтому, если вы укажете его для блока результатов вашего обработчика, результаты в нем будут пропущены для ваших запросов json:

<event-handler name="action.product.delete">
    <broadcasts>
        <message="DeleteProduct"/>
    </broadcasts>
    <results format="html">
        <result do="page.product.list" redirect="true"/>
    </results>
</event-handler>

Если вам нужно обработать другой результат для ваших запросов json, просто добавьте блок <results format="json">...</results> в ваш обработчик событий. Model-Glue 3 допускает несколько широковещательных рассылок, просмотров и блоков результатов для каждого обработчика событий.

Для получения дополнительной информации посетите страницу Форматы на вики Model-Glue .

...