0

我正在使用 Symfony2.1 和 Doctrine2.1

我想将 AJAX 用于我网站上的许多功能、编辑标题、评价文章、即时创建实体等。

我的问题很简单:

我是否需要为每个功能创建一个 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、布尔值、整数)重新组合项目,但也许已经存在一些可以很好地处理它的东西!

4

2 回答 2

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();
   });
于 2012-11-02T16:56:03.377 回答
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属性中。

于 2012-11-02T19:17:38.673 回答