AJAX temelleri karıştı

4 Cevap php

Yani şimdi, ben sadece bir şifreyi kontrol etmek temel bir form kullanıyorum. Ben yanlış şifre falan uyarmak için JavaScript kullanabilirsiniz böylece şifrenizi kontrol edin ve temelde sayfa.html kalmasını istiyorum. Ben bunu nasıl emin değilim. Bu check.php beni getirecek gibi görünüyor. Ben bütün süreci, herhangi bir yardım takdir çok emin değilim! Teşekkürler!

Sayfa.html

<form action="check.php" method="post">
    <input type="password" name="password" />
    <input type="submit" value="Submit" />

</form>

check.php

   <?php
    $password = $_POST['password'];
    if ( $password != "testing" ) {
        die();
    }
?>

4 Cevap

PHP genellikle nerede daha physically different makine (sunucu tarafı) çalışır web sunucusu çalışır webbrowser çalışır (istemci tarafı). Bu makineler, genellikle bir ağ ile birbirine bağlanmıştır. HTTP bir ağ protokolüdür. Webbrowser bir HTTP isteği gönderir. Webserver URL'sini sonraki işleme için PHP iletilmesi gerektiğini belirten bir HTTP isteği alır. PHP HTTP isteği alır ve işlemleri yapar ve bir HTTP yanıtı döndürür. Genellikle düz vanilya HTML sayfasının lezzet. Webserver geri gezgini HTTP yanıtı gönderir.

JavaScript gezgini çalışır ve web sunucusu çalışır beri PHP hakkında hiçbir şey bilmiyor. (Bu da bir produce bazı JS kodu HTTP üzerinden webbrowser gönderilmesine rağmen) sırayla PHP JavaScript hakkında hiçbir şey bilmiyor. JS ve PHP arasındaki iletişim kurmak için tek yolu HTTP olduğunu. JS bir HTTP isteği ateş edelim ve bir HTTP yanıt kullanıyor almak için yollarından biri XMLHttpRequest . This is the core technique behind Ajax.

Ben zaten jQuery aşina olduğunuz soru tarihinin bakın. Bu ajaxical istekleri yangın uygun bir çok fonksiyonu ile bir JS kütüphanesi bulunuyor. Bu özel durumda $.post kullanmak istiyorum. Örneğin

$('#formId').submit(function() {
    $.post('check.php', $(this).serialize(), function(valid) {
        if (valid) {
            alert('Valid!');
        } else {
            alert('Invalid!');
        }
    });
    return false; // Important! This blocks form's default action.
});

In ile check.php,

<?php
    echo $_POST['password'] != "testing";
?>

Ancak bu unobtrusive değildir. Kullanıcı JS devre dışı ise, o zaman tüm başarısız olur. Yapabileceğiniz en iyi şey bir ajaxical isteği jQuery ile veya ateş ve buna göre idare edilmiş ise PHP kontrol etmektir:

if ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
    // Ajax.
} else {
    // No ajax.
}

Alternatif jQuery de farklı bir URL ulaşmak veya fazladan bir parametre eklemek sağlayabilirsiniz.


Update: Burada JavaScript jQuery kullanmadığınız zaman gibi görünür nasıl:

document.getElementById('formId').onsubmit = function() {
    var xhr = (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4 && xhr.status == 200) {
            if (xhr.responseText) {
                alert('Valid!');
            } else {
                alert('Invalid!');
            }
        }
    }
    xhr.open('POST', 'check.php', true);
    xhr.send(serialize(this));
    return false; // Important! This blocks form's default action.
}

function serialize(form) {
    var query = '';
    for(var i = 0; i < form.elements.length; i++) {
        var e = form.elements[i];
        if (!e.disabled && e.name 
            && ((e.type != 'checkbox' && e.type != 'radio') || e.checked)
            && (e.type != 'submit' || e == document.lastClicked))
        {
            if (query.length) query += '&';
            query += e.name + '=' + encodeURIComponent(e.value);
        }
    }
    return query;
}   

document.onclick = function(e) {
    e = e || event;
    document.lastClicked = e.target || e.srcElement;
}

Şişirilmiş ve ayrıntılı, evet ;)

Eğer aynı sayfada kalmasını istiyorsanız ajax kullanmak gerekecek. I jquery ve jquery's post function kullanmanızı öneririz.

Temelde giriş butonuna tıklandığında çağrılan bir javascript işlevi oluşturun. Işlevi check.php bir istek gönderir. Check.php çıkışı orijinal komut dosyası iade edilecektir (güzünde belki 1 başarı için, 0) bir durum mesajı olacak. Oradan çıktı geçersiz şifre belirten bir mesaj olabilir, ya da doğru olup olmadığını bir cookie.

Eğer (aslında AJAX) yapmaya çalışıyoruz ne basit bir çözümdür:

  • Başarı veya başarısızlık üzerinde eşsiz çıkış şey için php script değiştirin.
  • Yerine normal form POST, php script veri göndermek için JavaScript kullanın.
  • Şifre geçerli olup olmadığını şifre uygun bir sayfaya, geçersiz veya direkt ise JavaScript kullanıcıyı uyarır var.

Tabii ki bu geniş vuruş vardır. Eğer olmadan çalışmak istiyoruz - bir AJAX isteği (JavaScript tarafından yapılan bir istek) yapılır ve sayfa düzenli bir şekilde POST tarafından istendiğinde başka bir yanıt zaman gerçekte tepki bir tür vermek için php script gerekir JavaScript - değil mi? Muhtemelen JavaScript sayfa içeriğini yerine bir uyarı kutusu güncellemek isteyeceksiniz. Onların erişmek sonraki sayfa içeri oturum bilir böylece script php oturum değişkenlerini ayarlamak isteyeceksiniz

Geniş okşar.

jQuery AJAX documentation yardımcı olabilir okuma.

Bir web sitesi tasarımı yaparken her şeyin olmadan çalışıyor sonra, her zaman JavaScript ekleyebilirsiniz. Bunun iki nedeni vardır. Biri için, bazı insanlar o açık olmadan göz atın. Diğer nedeni JavaScript her zaman orada kraker tarafından görüntülenebilir ve düzenlenebilir olmasıdır.

Bu yaklaşım şifre başarısını doğrular ayrı bir PHP dosyası olduğunu gerektirir. Orijinal sayfası (HTML ve JS) hakkında her şey sadece şifre göndermek ve belki de istek için beklemeniz gerekir. Aynı sayfada şeyleri tutmak için, giriş şifre göndermek ve aldığı yanıtı yazdırmak için AJAX kullanabilirsiniz. Eğer yükü sakıncası istemiyorsanız jQuery AJAX kolaylaştırır.

HTTPS üzerinden POST kullanarak GET ve HTTP kullanarak daha iyidir. Tabii ki, oturum değişkenleri takip etmek ve ayrıca bir ilk formu ve onlar aslında teslim aldığında zaman miktarını sınırlamak isteyebilirsiniz.