基本上我试图复制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);
答案 0 :(得分:2)
这应该有效:
$(this.target)[this.action](this.content);
答案 1 :(得分:0)
我不确定你在问什么?在风格上,我会这样写:
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);
});
如果您只想执行服务器发回的任何内容,而不是总是发送回eval操作?