AJAX-yetenekli tarayıcılar ve non-AJAX tarayıcılara destek için form işleme tasarım temiz yolu nedir?

4 Cevap php

Ben PHP kullanıyorum ve en iyi yolu mümkün olan en basit şekilde kod tekrarı olmadan, basit mesajların ve AJAX mesajları işlemek için ne olduğunu merak ediyorum. Teşekkürler!

4 Cevap

Sadece bu gibi bir form oluşturun:

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

Ve kovulduğu isteği bakın ne tür 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>';
    }
}

Bilmeniz gereken tek şey formu bir Ajax isteği ile sunulan ise $_SERVER['HTTP_X_REQUESTED_WITH'] bilgiler içermesidir

Bu adlandırılır progressive enhancement. Bu konuda gitmek için en iyi yolu, o üstüne JavaScript özellikleri eklemek, JavaScript'iniz kapalı iyi çalışan bir site inşa etmektir.

Benim durumumda, bunu yapmak için en kolay yolu Ajax ile form göndermek (ve belki de sunucu bir Ajax isteği olduğunu bildirmek için bir parametre eklemek), ve komut belgeyi güncelleştirmek için kullandığı sunucu dönüş HTML, sahip olmaktır .

I would start with the non-AJAX as the baseline and then add javascript to the form to submit the exact same  request with AJAX.

(Pseudo-js) gibi bir şey:

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

The real AJAX is of course much more complicated, involving browser compatibility, and code for fetching and  parsing all form values.

Ben düzenli mesajların ve AJAX mesajları desteklemek isterseniz (hayır "AJAX-yetenekli bir tarayıcı var) without code repetition., Sen olacak JavaScript / Non-JavaScript kullanıcıları desteklemek için bir yol var sanmıyorum Muhtemelen iki kere iş en azından bazı yapıyor sonunda.

Eğer really (kaç zaten vardır?) JavaScript olmadan kullanıcıları desteklemek istiyorsanız Yani, olmayan bir JS-çözümü ile sopa ve her şeyi sunucu taraflı yapmak. Web 1.0 ile sopa, yani ;)