$ Ajax-> link () Firefox'ta çalışmıyor?

3 Cevap php

Ben Başı CakePHP'ye okuyorum ve yorumlara oy böylece bunu yapmak için, bu AJAX bağlantıları bir çift oluşturmak için söyler:

<?=$ajax->link('<li>up</li>',
                      '/comments/vote/up/'.$comment['Comment']['id'],
                      array('update' => 'vote_'.$comment['Comment']['id']),
                      null, false);?>
<?=$ajax->link('<li>down</li>',
                      '/comments/vote/down/'.$comment['Comment']['id'],
                      array('update' => 'vote_'.$comment['Comment']['id']),
                      null, false);?>

Bu IE'de çalışıyor, ama FF o hiç bir şey yapmaz. Ürettiği bağlantılar şey yapmıyoruz, çünkü bile, denetleyici ya da modelini bulmuyor.

Bu gibi görünüyor oluşturur HTML:

<a id="link2128392960" onclick=" event.returnValue = false; return false;" href="/blog/comments/vote/up/1"/>
<li>
  <a id="link2128392960" onclick=" event.returnValue = false; return false;" href="/blog/comments/vote/up/1">up</a>
</li>
<script type="text/javascript">
  //<![CDATA[
  Event.observe('link2128392960', 'click', function(event) { new Ajax.Updater('vote-1','/blog/comments/vote/up/1', {asynchronous:true, evalScripts:true, requestHeaders:['X-Update', 'vote-1']}) }, false);
  //]]>
</script>

3 Cevap

Öncelikle, yapıştırılan HTML çıktısı doğru değildir. Eğer Kundakçı falan yerine tarayıcılar gerçek 'Kaynağı Görüntüle "sayfası bu kopyalanan gibi görünüyor. CakePHP bu senaryoda kendi kendine kapanan tespit etiketleri oluşturmak (<a /> <a></a> karşıt olarak) gibi örnekte gösterildiği değildir.

Ben bu olsa sorununuzu işaret inanıyorum. Tarayıcınızın HTML çözümleyici (veya Kundakçı adlı) HTML biçimlendirilmiş olmasının zamanı noktalarda kodu düzeltmek için çalıştı aslında. Özellikle, (<li>), bir satır içi öğe içinde (<a>). Blok-düzeyi öğesi koyamazsınız

<div class="actions">
    <ul>
        <li>
            <?php echo $ajax->link('up', array(
                'controller' => 'comments',
                'action' => 'vote',
                'up',
                $comment['Comment']['id']
            ), array(
                'update' => 'vote_' . $comment['Comment']['id']
            ), null, false); ?>
        </li>
        <li>
            <?php echo $ajax->link('down', array(
                'controller' => 'comments',
                'action' => 'vote',
                'down',
                $comment['Comment']['id']
            ), array(
                'update' => 'vote_' . $comment['Comment']['id']
            ), null, false); ?>
        </li>
    </ul>
</div>

Yukarıdaki örnekte satır içi gibi <a> elemanları, daha sonra tamamen blok seviyesinden <li> elemanları içinde iç içe olacak, geçerli HTML üretecek. Bu durum umarım standartlara uyumlu tarayıcılarda sayfanızın işlevselliğini düzeltmek gerekir.

Ben ilk bağlantı gibi, bir bitiş çapa etiketi olmadan bir çapa etiketi için geçerli HTML olduğunu sanmıyorum:

<a id="link2128392960" onclick=" event.returnValue = false; return false;" href="/blog/comments/vote/up/1"/>

Belki Firefox bunun için sana kızgın olduğunu.

Aynı zamanda da geçersiz HTML aynı kimliği, iki etiketleri var, ama aynı zamanda JavaScript ikinci bir bağlantı ama bunu asla sona erdi, çünkü bu bağlantı ilk bağlantıyı tarafından "yenen" ediliyor tıklamalar arıyor anlamına gelebilir.

Sadece fikirleri dışarı atma; p

Php kısa etiketleri ("<? ") kullanarak kötü bir uygulama olarak kabul edilebilir, artı onlar php 6 kaldırılır ediliyor.