0

有手风琴面板,每个面板在 javascript 中都有自己的变量。

我想使用诸如事务或 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 请求?

4

2 回答 2

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
   });
 }
}
于 2013-06-03T00:32:06.153 回答
1

您可以这样做:假设您的面板的数据没有加载 onLoad,为每个面板添加一个类。此类表示尚未为特定面板加载数据

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

加载数据时删除该类

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

检查所有数据是否已加载的函数

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

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

于 2013-06-03T01:01:31.487 回答