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
a> 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 a> 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 ;)