В основном я пытался воспроизвести одну из вещей, которые xajax дал мне, с помощью Jquery -> Возможность определить, что мой ответ изменяет на стороне сервера, не настраивая ничего на стороне клиента. Работает отлично, как есть, но каждый раз, когда я хочу вызвать другую функцию Jquery, я должен добавить ее в свои операторы if.
Каждый элемент в массиве ответов содержит что-то, что нужно изменить на стороне клиента.
Я должен быть в состоянии убрать почти все выражения this.action == 'blah' if и заменить его каким-нибудь умным javascript, но, видимо, я недостаточно умен. :)
$. ShowMessage - просто моя замена для предупреждения с тайм-аутом и битом.
Функция Jquery моего клиента:
$.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;
};
Код моего сервера:
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);