我正在使用Symfony2.1和Doctrine2.1
我想在我的网站上使用AJAX进行许多功能,编辑标题,评价文章,动态创建实体等等。
我的问题很简单:
我是否需要为每个functionnality创建一个JQuery函数,如下所示:
$('#specific-functionality').bind('click', function(e){
var element = $(this);
e.preventDefault();
// the call
$.ajax({
url: element.attr('href'),
cache: false,
dataType: 'json',
success: function(data){
// some custom stuff : remove a loader , show some value, change some css
}
});
});
这对我来说听起来很沉重,所以我想知道JS方面是否有任何框架,或者我可以用来避免这种情况的特定方法。我正在考虑按响应类型(html_content,boolean,integer)重新组合项目,但也许已经存在的东西可以很好地处理它!
答案 0 :(得分:1)
据我所知,您要求使用更轻松版本的JQuery ajax方法。有直接的get / post方法,而不是使用ajax。
$.get(element.attr('href'), {'id': '123'}, function(data) { alert(data); } );
配置错误功能
$.get(element.attr('href'), {'id': '123'}, function(data) {alert(data);})
.error(function (XMLHttpRequest, textStatus, errorThrown) {
var msg = jQuery.parseJSON(XMLHttpRequest.responseText);
alert(msg.Message);
});
此外,您可以传递回调函数来执行任何同步操作,例如
function LoadData(cb)
{
$.get(element.attr('href'), { 'test': test }, cb);
}
并致电
LoadData(function(data) {
alert(data);
otherstatements;
});
对于进度条,您使用JQuery ajaxStart和ajaxStop函数,而不是手动隐藏和显示它。注意,它会在页面上的每个JQuery AJAX操作中被触发。
$('#progress')
.ajaxStart(function () {
//disable the submit button
$(this).show();
})
.ajaxStop(function () {
//enable the button
$(this).hide();
});
答案 1 :(得分:0)
代替$('#specific-functionality').bind('click', function(e){
,试试这个:
$(".ajax").click(function(){
var url = $(this).attr("href") ;
var target = $(this).attr("data-target") ;
if (target=="undefined"){
alert("You forgot the target");
return false ;
}
$.ajax(....
并在html中
<a class="ajax" href="..." data-target="#some_id">click here </a>
我认为这是最简单的解决方案。如果你想通过ajax工作一些链接,只需给它类“ajax”并将data-target
放到应输出结果的位置。所有自定义内容都可以放在这些data-something
属性中。