Muy buenas, estoy realizando una web que tiene como característica un enlace vía ajax que devuelve del servidor un json que debe reemplazar parte del contenido del texto de ese enlace ajax. El problema es que ni nen el método complete ni en el de success he conseguido acceder al contenedor padre (o al menos, averiguar el ID del selector que dispara el ajax). El código jquery es el siguiente:
Código PHP:
$this->widget('bootstrap.widgets.BootButton', array(
'label' => 'xxx',
'encodeLabel' => false,
'type' => 'success',
'size' => 'mini',
'buttonType' => 'ajaxButton',
'url' => Yii::app()->createUrl('publicaciones/votar', array('id' => $publicacion->id)),
'ajaxOptions' => array(
'dataType' => 'json',
'beforeSend' => 'js:function(){ $(this).addClass("disabled"); }',
'success' => 'js:function(data){ if(data.hasOwnProperty("votos")) { $(this).closest("div.publicacion-footer").text("Votos("+data.votos+")"); } }'
),
'htmlOptions' => array(
'id' => 'publicacionCas'.$publicacion->id,
'class' => 'btn-espacio'),
));
Y el HTML es el siguiente:
Código HTML:
<div class="publicacion-footer">
<div class="publicacion-footer-derecha">
<button>xxx</button>
<button>yyy</button>
</div>
<div class="publicacion-footer-izquierda">
<button name="yt3" type="button" id="yt3">zzzz</button>
</div>
</div>
Bien, use console.log de $(this) y $(this).closest("div.publicacion-footer") para ver si me devolvían algo, el segundo no devuelve nada y el primero devuelve un objeto con la siguiente información:
Código Javascript:
accepts: Object
async: true
cache: false
complete: function (data){ console.log($(this)); console.log($(this).closest("div.publicacion-footer")); $(this).closest("div.publicacion-footer").replaceWith(data); }
contentType: "application/x-www-form-urlencoded"
contents: Object
converters: Object
crossDomain: false
dataTypes: Array[2]
flatOptions: Object
global: true
hasContent: false
isLocal: false
jsonp: "callback"
jsonpCallback: function () {
processData: true
responseFields: Object
type: "GET"
url: "/cod/index.php/publicaciones/favorito/2?_=1340812969363"
xhr: function createStandardXHR() {
__proto__: Object
Me gustaría saber si a través del objeto $(this) puedo acceder al padre con clase "publicacion-footer", o sí hay alguna manera a través de jQuery de acceder, estuve leyendo la documentación de jQuery.ajax pero no he conseguido averiguar nada en claro. Espero que alguien pueda darme algún atisbo de luz a este problema.
Probé dentro del success este código: $(this).parents(‘div:eq(0)’).html(data.votos), que es el primer div que tiene encima, sin que funcionase (he probado esto en otros scripts con éxito).
Hay una duda que me corroe de base al script que me genera Yii es que en antes del jQuery.ajax empieza con $(‘body’).on(‘click’,’#yt3’,function(){ … } y me temo que al hacer $(this) me esta devolviendo el body en vez del selector…
Si alguien me puede echar una mano se lo agradecería.