Nasıl php fonksiyonu otomatik bir javascript işlevi çağrı yapabilirim?

4 Cevap php

Ben ajax / jquery, php / html kullanarak bir tablo için bir otomatik yenileme oluşturmak için çalışıyoruz, ve Drupal 6 duyuyorum.

Kod Veritabanı eklemek bitmiş ve başarılı olmuş bir kere:

echo "<script type='text/javascript'>autoRefresh()</script>";

Sonunda aslında tablonun yenilenmesini gerçekleştiren javascript kodunu çağırır bağlantı için kod:

    $block_content .= "<br><a id='refreshItemId' class='refreshItemLink' href='$host_url/refresh/projectitems/gid/$curr_gid/nid/$curr_nid'>Refresh List</a>";

(Ben bir javascript dosyası olabilir bilmek ve sonra bu içerir, ama bu başka bir gün için değil) PHP kullanarak sayfaya eklenir javascript kodu. Bu otomatik olarak (tıklama yapmak girişimi için eklenen kod) bir form gönderildikten ve öğenin başarıyla veritabanına eklenen bir kez yukarıda oluşturduğunuz link:

    $block_content .= "<script type='text/javascript'>
        function autoRefresh()
        {
            alert('Auto Refresh');
            //document.getElementById('refreshItemId').click();
        }
    </script>";

Ben bu çalıştım düşündüm, ama AutoRefresh () JS işlevi denir geçmez. Herhangi bir fikir?

4 Cevap

Eğer bir "onload" olay işleyicisi AutoRefresh çağrıyı kaydırmak gerekir. Şu anda fonksiyon çalışan (veya çalıştırmak için çalışıyor) kısa sürede tarayıcı çıktı olduğu gibi, bu yüzden bu noktada tıklayın bir düğme var değildir.

Jquery:

<script type="text/javascrpt">
    $(function() {
        autoRefresh();
   });
</script>

Update:

İsterseniz kullanıcı sonra tıklandığında için yenile düğmesine AJAX değişiklikler yapmıştır, yok gibi bir şey:

$.ajax({
  data: //data sent to script;
  url: //path to PHP script
  success: autoRefresh();
  }
});

Eğer sadece PHP script "güvenli kelime" sunucunun yanıtını gözden şey başarı işlevini değiştirmek çeşit gönderir, ve "tüm açık" sinyali ise, o AutoRefresh yaptığında onu güncellemek istiyorsanız.

Update 2:

Tamam, bunu karma olan, ne gerek işlevine bağlı kendi olay işleyicisi. Yani PHP çıktılarının aşağıdaki jquery script var:

 <script type="text/javascript">

 $(function() {
     $("#refreshItemId").click(function() {
     $(this).delay('200');
     autoRefresh();
     });
 });

Birkaç not:

Erteleme yöntemi jquery 1.4 için yeni. Eğer daha eski bir sürümü varsa, işlevi durak için kullanılabilecek diğer yöntemler vardır.

Ben o kadar henüz .delay() ile karışıklık bir şansı olmadı, bu yüzden ben biraz karıştırdım.

Ama genel bir fikir açık olmalıdır: sayfa yüklendiğinde bağlantı işlevi bağlama; Onclick olayı tetikler, bu bitirmek için Drupal ajax için 0,2 saniye bekler; Son olarak, bu AutoRefresh tetikler.

Bunu çağırmadan önce işlev tanımı göndermek gerekiyor.

Kullanıcı aracısı (tarayıcı) olarak henüz bir hataya neden olan var olmayan bir işlevi çağırmak için çalışır.

Eğer innerHTML ya da benzeri kullanarak sayfanın içeriğini güncelleyerek ise bu DOM eklendiğinde, kod yürütülmez. Aynı zamanda potansiyel XSS açıkları sizi açabilir rağmen akıllı kullanımı eval(), bu giderebilir. Güvenli rota sayfada tanımlanan işlevi vardır, ve sonra XHR başarıyla döndüğünde onu aramak.

EDIT! After re-reading the entire thread with Anthony:

Birkaç şey:

  • Size iade yanıtı üzerine "eval ()" ekleyebilirsiniz görün.

    echo "<script type='text/javascript'>eval('autoRefresh()');</script>";

  • Küresel bir o AutoRefresh () fonksiyonu koymak deneyin kafa etiketinde denilen JS dosyası içerir.

Eğer Ajax çağrı yapmak istiyorum bu şeyler ekleyebilirsiniz böylece başka bir alternatif drupal kütüphanede zaten fonksiyonları üzerine yazmak olacaktır.