AJAX避免重复代码

时间:2012-11-02 15:24:49

标签: ajax jquery symfony

我正在使用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)重新组合项目,但也许已经存在的东西可以很好地处理它!

2 个答案:

答案 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属性中。