Ajax: veritabanına başka bir sayfada bildirimi görüntüleyerek, sonra başarıyla kaydedilmiş veriler

3 Cevap php

I have standed out for awhile now with a thing i want to do. Thing i want to do is to display a message(confirmation, "You have earned 2 points") at the top (message like stackoverflow).

Ive bu oturum değişkeni kullanarak bir onay mesajı saklamak, ve yoktu sonra yükler görüntülemek için bazı mesaj varsa kontrol etmek için, her 1 saniye session.php bir ajax komut dosyası vardır index.php de.

Bu başka bir şekilde yapılabilir alamiyorum ama, acaba? Yani, her 1 saniye her zaman kontrol etmek gerekiyor mu

Sitemin index.php üzerinde bir tasarım ve daha sonra bir çerçeve içinde kalan geziyor.

Neyse, ben zaten gördüğünüz gibi, ben o sunucuya çok fazla talep edebilir düşünüyorum bunun için bir çözüm var.

Yani ben bu başka bir şekilde yapılabilir cant, merak ediyorum? Yani, her 1 saniye her zaman kontrol etmek gerekir?

Bu doğru bir yorum taktınız ve depolanan oturum değişken user_message olarak adlandırılan, daha sonra # kutusunu göstermek için index.php söylemek mümkün değildir.

Benim yorumum "formu" sadece normal bir metin alanı ve bir Gönder düğmesi içeren show.php, üzerinde. Şimdi veritabanına normal mysql sorgusu ile ekler hangi insert.php için, bir dizeye her geçen bir JS komut dosyası aracılığıyla mesaj saklar ve bir oturum değişkeni saklar. (Kaynak kodu aşağıda)

Here's some coding: session.php:

<?php 
session_start();
if(isset($_SESSION['user_message'])) {
echo 1; 
}
?>

index.php div kutusu:

<div id='box' onclick="closeNotice()" style="display: none">
Hey, <b><? echo $pusername; ?></b> - <? echo $_SESSION["user_message"]; ?> 
<a href="#" class="close-notify" onclick="closeNotice()">X</a>
</div> 
<?php
$_SESSION["user_message"] = null; 
?>

(ben şimdi kullanıyorum) her 1 saniyede yenileme ajax komut:

function checkSession(){
    $.ajax({url: "session.php", success: function(data){
         if( data == 1){
             $('#box').show();
         }else{
             $('#box').hide();
         }
    }});
}
setInterval('checkSession()',1000);

Veritabanına Yorum ekler hangi insert.php dize geçer komut:

var nocache = 0;
function insert() {
document.getElementById('insert_response').innerHTML = "Please Wait .. "
var fID= encodeURI(document.getElementById('fID').value);
var kommentar= encodeURI(document.getElementById('kommentar').value);
nocache = Math.random();
http.open('get', 'insert.php?fID='+fID+'&kommentar=' +kommentar+'&nocache = '+nocache);
http.onreadystatechange = insertReply;
http.send(null);
}
 function insertReply() {
 if(http.readyState == 4){
 var response = http.responseText;
 document.getElementById('insert_response').innerHTML = ''+response;
 }
} 

Show.php on formu:

<div id="insert_response">
</div>
<form action="javascript:insert()" method="post">
<textarea id="kommentar" name="kommentar"></textarea><br />
<input type="hidden" name="fID" id="fID" value="<? echo $_GET["id"]; ?>" />
<input type="submit" name="Submit" value="Sæt ind!"/> 
</form>

3 Cevap

Neden sadece dataType set değil $ ajax çağrısı ile "script" için -. Ve ajax yöntem çağrıları uygun javascript eklemek için / / göstermek / gizlemek / kaldırmak buna göre sayfadaki öğeleri değiştirmek oluşturduklarını $ php komut dosyası var.?

Ben fazla düşünerek bu sorunu, bence bu durumda seans kullanımı da gereksiz olduğunu düşünüyorum ... ve mümkünse deneyin önlemek için olsaydı.

Özel parametre "script" için parametre "dataType" de ve ben size ulaşmak için çalışıyoruz ne yararlı bulacaksınız düşünüyorum - http://api.jquery.com/jQuery.ajax/ - Buraya bak.

Eğer ileti birden çok sayfa arasında kalmak istemiyorsanız oturumları için hiçbir ihtiyacı yoktur.

Senin gizli girişine dükkanını ajax yanıtı göndermek ve almak için $ _POST kullanmak bastıktan sonra başka bir sayfaya kullanıcıyı göndermeye çalışıyor eğer.

Aynı sayfa, sadece görüntülemek için () kutu ve box.show aramak için ajax yanıt kaydedin.

İyi?

Sana comet istekleri kurtulmak gerekir düşünüyorum. Ancak, ben kendim kullanmadım ve ben gerçekten bu konuda size yardımcı olamaz bu konuda pek bilmiyorum.