iyi bir şekilde ajax olmadan form action yanıt almak nasıl?

0 Cevap php

Ben bir AJAX yanıt almak için biliyorum:

$.post( '/action', 
        { actiontodo: 'insert' } 
        function (data) { alert(data); } );

Action.php (sunucu tarafı) int:

<?php 
       if ($_POST['actiontodo'] == 'insert') 
       { 
           doInsertAction(); 
           echo "inserted"; 
       } 
?>

Takılı: Nihayet bu kodun çıktısı kelime ile bir uyarı BOX.

ANCAK, ajax olmadan, ben (sunucu tarafında) bu çözmek için iki yol vardır:

ONE:

<?php 

if ($_POST['actiontodo'] == 'insert') { 
    doInsertAction(); 
    header( "Location: " . $_SERVER['HTTP_REFERER'] . " &response=inserted"  ); 
} ?>

TWO:

<?php
session_start();
if ($_POST['actiontodo'] == 'insert') {
    doInsertAction();
    $_SESSION['response'] = 'inserted';
}
header( "Location: " . $_SERVER['HTTP_REFERER'] );
?>

Sayfasına dönmeden ben OTURUM veya GET cevap almak ve uyarısı gösterir.

Ben daha ONE çözüm gibi, ama her çözüm bir sorun var:

ONE problem:

Dönen URL: http://www.foo.com/myrefererurl&response=inserted

Formunu kullanarak olmadan türleri bu URL'yi varsa, uyarı kutusu sayfayı yenileyecek her zaman göreceksiniz. Soru: bir mesaj sadece bir zaman göstermek nasıl? (SADECE FORM EYLEM SONRASI)

TWO problem:

OTURUM artık eylemden sayfa döner Açıkçası çözüm belki gibi oturumun Bu değeri silmek ($ _SESSION ['tepki']) eklenen değere sahiptir: ($ _SESSION ['tepkisi'] tanımsız, ama herhalde UNSET $ _SESSION ['tepki'] hala teslim olmadan başka bir formda (varolduğundan diğer sayfada başka bir forma giderken herhangi bir nedenle (bağlantı hatası veya kullanıcı, vb tarafından durduruldu navigasyon), uzandı yok uyarı irade gösterdi ve) o tepki ile ilgisi yoktur. başka bir URL'ye eklenir inclusively İLE GET & yanıtı = sorun çok var olacaktır.

Ben bu soruları anlamak ve bir İYİ ŞEKİLDE çözüm getirmek umuyoruz. Temelde soru yanıtları bu kontrol nasıl ......

0 Cevap