У меня есть содержимое генерируемого div как это …
<div class="messagecount">
<?php
$mesagecount = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM " . $wpdb->base_prefix . "messages WHERE message_to_user_ID = %d", $user_ID));
echo $messagecount;
?>
</div>
Я также использую fancybox для всплывающего сообщения, у меня настроен обратный вызов, так что когда я закрываю fancybox, я могу вызвать команду, но теперь я хочу иметь возможность обновлять div для подсчета сообщений без обновления страницы.
Могу ли я сделать это, используя ajax в сочетании с обратным вызовом fancybox close?
Да.
Во-первых, присвойте своему идентификатору div «messagecount».
Затем поместите в раздел head вашего документа следующий код:
<script>
function ajaxRequest(){
var activexmodes=["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"]
if (window.ActiveXObject){
for (var i=0; i<activexmodes.length; i++){
try{
return new ActiveXObject(activexmodes[i])
}
catch(e){
}
}
}
else if (window.XMLHttpRequest)
return new XMLHttpRequest()
else
return false
}
</script>
Теперь создайте load.php и вставьте в него:
<?php
$mesagecount = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM " . $wpdb->base_prefix . "messages WHERE message_to_user_ID = %d", $user_ID));
echo $messagecount;
?>
Чтобы перезагрузить окно, просто поместите следующий код после него:
<a href="#" onclick="sending(); return false;">Reload</a>
<script>
function sending(){
document.getElementById("messagecount").innerHTML="Refreshing"var mypostrequest=new ajaxRequest()
mypostrequest.onreadystatechange=function(){
if (mypostrequest.readyState==4){
if (mypostrequest.status==200 || window.location.href.indexOf("http")==-1){
document.getElementById("messagecount").innerHTML=mypostrequest.responseText
}
else{
document.getElementById("messagecount").innerHTML='Woops! An error occurred. Please check your Internet connection and try again.';
}
}
}
mypostrequest.open("GET", "load.php", true)
mypostrequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
}
</script>
Других решений пока нет …