jQuery. getJSON fonksiyonu döndürülen verileri yeniden bağlamanız gerekiyor

1 Cevap php

Ben sorun bazı döndürülen verilere bağlamak için benim kalıcı pencere işlevini alıyorum yaşıyorum. Ben Cody Lindy'nın Jquery.DomWindow eklentisi kullanıyorum. Bu sorunu dışında, düzgün herşey unutmayınız.

Benim jQuery.getJSON çağrısından döndürülen verileri kalıcı bir pencere açmak gerekiyordu bir bağlantı içeriyorsa sorun oluşur. Bu bağlantı, ancak DOM tarafından kabul edilmez ve bu nedenle herhangi bir tarafından bağlı değildir.

Benim jQuery işlevi:

$(".deleteThis").live("click", function(){
    var $this = $(this);

    $.getJSON(this.href, function(data) {
    	if( data.success == '1') {
    	$this.parent().html('<span style="background:#f1ffd6;padding:5px;">' +data.msg+'</span>');         
    	} 
    	else if( data.success == '2') {
    	$this.parent().html('<span style="background:#f1ffd6;padding:5px;">' +data.msg+'</span>');         
    	}      
    	else {alert("Failure (most likely our fault).");}
    });

    return false;
});

JQuery gönderir php betik (alakalı değil aşağıda gösterildiği gibi değil) bazı veritabanı komut dosyası içerir. JSON dizi döndürür ilgili php kodu şudur:

if($del ==1 ){
    $msg= "$name has been deleted. (<a href='media/delete_coll.php?cid=$cid&delete=0' class='deleteThis' >undo</a>)";
    print json_encode(array("success" => 1,"msg" => $msg));
}

if($del ==0 ){ 
    $msg= "$name <a href='media/editCollab.php?coll=$coll_id' class='absoluteIframeDOMWindow'>edit</a> 
     <a href='media/delete_coll.php?cid=$coll_id&delete=1&coll=$coll' class='deleteThis' > delete</a> | 
     Collaborator has restored.";
     print json_encode(array("success" => 2, "msg" => $msg));
}

1 Cevap

Eklenti sayfa yük olay işleyicileri bağlar, ve daha sonra aslında sonra sayfaya dinamik içerik ekleyerek, çünkü bu oluyor. Kolay çözüm, bir fonksiyonu haline DomWindow eklentisi instatiate ve yeni bir bağlantı eklenir her kez sayfa yük ve tekrar onu aramak ne olursa olsun kod taşımak olacaktır. O çift mevcut bağlantıları bağlama başlarsa, o zaman dinamik bağlantılar farklı bir sınıf vermek ve bu sınıf için etrafında ikinci kez instatiate olurdu.

EDIT:

Orada burada bazı yanlış anlama gibi görünüyor, bu yüzden daha fazla anlatacağım:

JQuery live feature (which you are using for .deleteThis) yaşadığınız sorunu çözmek için tasarlanmıştır. Muhtemelen zaten bunu biliyor ve dolayısıyla bunu kullanıyor. Ben ne söylediğini sandığınız gibi dönen DomWindow edit bağlantı DomWindow açıyor olmasıdır inanıyorum, çünkü yukarıdaki paragraf oldu. DomWindow olayları bağlamak için live, dahili olarak kullanmak değil çünkü bu. Başlangıçta sayfa yük DomWindow instatiate Yani, bağlantıları bağlı, ama yeni olanlar yok olsun. (Değil "temiz" olmasına rağmen) sadece bir işleve kod taşımak için doğrudan sadece live kullanarak bunu düzeltmek olabilir, ama kolay eklenti kaynak kodunu düzenlemek ve istekli iseniz Eğer sayfaya daha fazla içerik ekleyerek konum zaman diyoruz.