Какой самый чистый способ проектирования обработки форм для поддержки браузеров с поддержкой AJAX и браузеров, не поддерживающих AJAX? - PullRequest
1 голос
/ 26 февраля 2010

Я использую PHP, и мне интересно, как лучше всего обрабатывать простые POST и AJAX POST без повторения кода самым простым способом. Спасибо!

Ответы [ 4 ]

3 голосов
/ 26 февраля 2010

Просто создайте форму, подобную этой:

<form action="formhandler.php" method="post">
    <!-- form data here -->
</form>

И посмотрите, какой запрос был запущен в formhandler.php:

if($_SERVER['REQUEST_METHOD'] == 'POST' /* && isset($_POST['var'])*/){
    if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'){
        // Request was send by Ajax, so echo JSON-code
        echo '{"error": false}'
    } else {
        // No Ajax was used, so echo HTML-code
        echo '<html><head><title>Ok</title></head><body><p>Ok</p></body></html>';
    }
}

Единственное, что вам нужно знать, это то, что $_SERVER['HTTP_X_REQUESTED_WITH'] содержит информацию, если форма была отправлена ​​по запросу Ajax

1 голос
/ 26 февраля 2010

Это называется прогрессивное улучшение . Лучший способ сделать это - создать сайт, который будет хорошо работать с отключенным JavaScript, а затем добавить функции JavaScript.

По моему опыту, самый простой способ сделать это - отправить форму через Ajax (и, возможно, добавить параметр, чтобы сервер знал, что это был запрос Ajax), и заставить сервер возвращать HTML, который ваш скрипт использует для обновить документ.

0 голосов
/ 26 февраля 2010

Я не думаю, что есть способ поддержать пользователей JavaScript / Non-JavaScript (нет "браузера с поддержкой AJAX) без повторения кода . Если вы хотите поддерживать обычные POST и AJAX-POSTs, вы, вероятно, в конечном итоге будете выполнять хотя бы часть своей работы дважды.

Так что, если вы действительно хотите поддерживать пользователей без JavaScript (сколько их, во всяком случае?), Придерживайтесьс не-JS-решением и делайте все на стороне сервера. Придерживайтесь Web 1.0, то есть;)

0 голосов
/ 26 февраля 2010

Я хотел бы начать с не-AJAX в качестве базовой линии, а затем добавить JavaScript в форме представить таже запрос с помощью AJAX.

Что-то вроде (псевдо-JS):

onsubmit="do_ajax(self.location, document.getElementsByTag('input').values()) return false)"

Реальная AJAX, конечно, гораздо сложнее, включая совместимость браузера и код для извлечения и разбор всех значений формы.

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