如何从jquery回调到父函数获取数据

时间:2010-09-27 11:05:36

标签: jquery-ui callback scope droppable

我正在使用jquery ui拖放代码。删除后,将执行getJSON请求以检查新数据并更新数据库。这工作正常,直到我的后端返回错误,因为我无法从匿名函数中取消删除。

如果出现错误,后端会返回如下所示的json:

{"result":0}

这是处理drop的代码:

 $('.droppable').droppable({
  drop: function(event, ui) {
   $.getJSON('/roster/save', 'location_id=1', function (){
    if (data.result==0) {
     // now the drop should be cancelled, but it cannot be cancelled from the anonymous function
    }
   });

   // if data was available here I could check the result and cancel it
   if (data.result==0)
    return false; // this cancels the drop

   // finish the drop
   ui.draggable.appendTo($('ul', this));
  }});

我希望这有点清楚。 有任何想法吗? :)

2 个答案:

答案 0 :(得分:0)

好吧,直到我找到一个不那么难看的解决方案,我将使用同步ajax调用与jQuery .data()方法结合使用。而不是.getJSON()调用:

$.ajax({  
 async: false,
 type: "POST",  
 url: "/roster/add",  
 data: 'location_id=1',  
 dataType: 'json',
 success: $.proxy(function(data) { $(this).data('tmp',data) }, $(this)),
});  

然后我可以检查存储数据的值,并在必要时返回false:

if (this).data('tmp').result != 1) {
 return false;
}

希望这有助于某人。

答案 1 :(得分:0)

为什么不将你的json数据分配给一个新的全局变量,该变量应该在你的getJson函数之外可用?

$('.droppable').droppable({
    drop: function(event, ui) {
        $.getJSON('/roster/save', 'location_id=1', function (){
            jsonData = data;
        });

        // if data was available here I could check the result and cancel it
        if (jsonData.result==0)
        return false; // this cancels the drop

        // finish the drop
        ui.draggable.appendTo($('ul', this));
    }
});