2013-06-03 15 views
0

有手风琴面板,每个面板在javascript中都有自己的变量。如何在jquery ajax中发布单个事件,完成所有事件后?

我想将数据从使用类似POST请求的交易或队列jQuery的每个面板保存。

每个小组由准备数据结合自身的事件onSave点击。

//panel1 that prepares the data 
$("#save").click(function() { 
    globalvar['panel1'] = 'somedata'; 
}); 
//panel2 prepares the data 
$("#save").click(function() { 
    globalvar['panel2'] = 2*21+11; 
}); 

我怎样才能让AJAX请求,所有的面板已经准备他们的数据之后?

+0

你可以发布你的HTML结构吗? –

+0

@JudeDuran http://jsfiddle.net/igos/LLeuY/ –

回答

1

你可以做这样的:假设你的面板数据不会被加载的onLoad, 类添加到每个面板。这个类意味着数据还未当数据被加载

$("#save").click(function() { 
    //code to load data 
    //Adjust according to your HTML structure 
    $(this).removeClass("noDataLoaded"); //encapsulate this when it has succeeded loading. 
    groupPost(); 
}); 

功能,如果所有数据已被加载,检查加载特定面板

<div class="noDataLoaded"></div> 

卸下类

function groupPost() { 
    if($(".noDataLoaded").length == 0){ 
     $.ajax({ 
     //code 
     }); 
     } 
    } 

groupPost()只会在没有使用noDataLoaded类的元素时触发,并且只有在您单击所有面板并加载其数据时才会发生。

+0

是的,这可能是解决方案之一。我认为jQuery有一个插件。 –

+0

谢谢你的小提琴!我已经检查过jquery手风琴,看来没有简单的方法来实现你的目标。如果你对这个帖子中的答案不满意,你必须找到另一个解决方法..如果你找到了一个好的答案,请发布你的答案。谢谢! :) –

+0

我认为没有简单的答案:/我想让jQuery lib允许在不久的将来这样的事情。 –

1
var dataToPost = new Array(); 
var isButton1Clicked = false; 
var isButton2Clicked = false; 

//panel1 
$("#save").click(function() { 
    isButton1Clicked = true; 
    dataToPost['panel'] = btoa($('#blob1').val()); 
    checkAndSubmit(); 
}); 
//panel2 
$("#save").click(function() { 
    isButton2Clicked = true; 
    dataToPost['panel2_amount'] = $('#multi').val() * $('#multi2').val() + 1; 
    dataToPost['crc32'] = crc32($('#blob2').val()); 
    checkToSubmit(); 
}); 


//some magic function 
function checkToSubmit() { 
//make only ONE ajax request, saving data from all panels 
if (isButton1Clicked && isButton2Clicked) { 
    $.ajax({ 
    type: 'POST' 
    data: dataToPost 
    }); 
} 
} 
+0

如果你想为每个按钮处理不同的响应,那么你可以提供一个回调作为函数的第三个参数。 – Ringo

+0

谢谢你的回答,但每次都会发布AJAX。我只想发布一个请求。 –

+0

请求中需要哪些信息? – Ringo

相关问题