Benim jQuery fonksiyonu gibi xajax basitleştirmek

2 Cevap php

Temelde xajax jQuery ile bana verdiği şeylerden biri çoğaltmak çalışıyordu -> benim yanıt istemci tarafında herhangi bir şey kurmadan, sunucu tarafı değiştirir ne tanımlamak için yeteneği. Olduğu gibi mükemmel çalışıyor, ama ben farklı bir jQuery işlevi çağırmak istediğiniz her zaman, benim if ifadeleri eklemek gerekir.

Yanıt, dizinin her elemanı istemci tarafında değiştirilmesi şey içerir.

Ben == neredeyse tüm this.action dışarı almak gerekir 'selam' ifadeleri ve bazı akıllı javascript ile değiştirin, ama görünüşe göre yeterince akıllı değilim eğer. :)

$. ShowMessage bir zaman aşımı ve yapışkan bit, sadece uyarı için benim yedek.

Müvekkilim JQuery fonksiyonu:

$.doAjax = function(func,values) {
 $.ajax({ data: values, url: '/time/ajax/' + func, type: 'POST', dataType: 'json', timeout: 5000,
  error: function(xhr, ajaxOptions,thrownError){ $.showMessage('Error processing request: ' +  func,10000);$('#debug').html(xhr.responseText); },
  success: function(data){
    if(data){
  $.each(data, function(){
    if ( this.action == 'attr' ) $(this.target).attr(this.content);
    if ( this.action == 'removeAttr' ) $(this.target).removeAttr(this.content);
    if ( this.action == 'addClass' ) $(this.target).addClass(this.content);
    if ( this.action == 'removeClass' ) $(this.target).removeClass(this.content);
    if ( this.action == 'html' ) $(this.target).html(this.content);
    if ( this.action == 'text' ) $(this.target).text(this.content);
    if ( this.action == 'val' ) $(this.target).val(this.content);
    if ( this.action == 'eval' ) {
          try { 
        eval(this.content); 
      }
      catch(err) {
            $.showMessage(err,5000);
      };
    };
      });
    }
  } 
 });
 return this;
};

Benim sunucu tarafı kodu:

header("Content-type: text/plain");   
$response = array();
$response[] = array('action'=>'html','target'=>'#booked_time_group_unbilled','content'=>get_booked_time_group_unbilled());
$response[] = array('action'=>'html','target'=>'#booked_time_my_unbilled','content'=>get_booked_time_my_unbilled());
$response[] = array('action'=>'eval','target'=>'','content'=>"$.showMessage('The selected time has been deleted',5000,true)");
echo json_encode($response);

2 Cevap

Bu çalışması gerekir:

$(this.target)[this.action](this.content);

Sana ne soruyorsun tam olarak emin değilim? Üslup, ben bu gibi yazmak istiyorum:

var handlers = {
    attr: function() { $(this.target).attr(this.content) },
    removeAttr: function() { $(this.target).removeAttr(this.content) },
    // etc.
};

$.each(data,function() {
   handlers[this.action].call(this);
});

Sadece sunucu sadece her zaman eval eylemi geri göndermek değil, geri gönderir ne yürütmek istiyorsanız?