2013-05-12 151 views
0

我认为我想要做的事情非常简单,但无法让它工作。我循环遍历一个表并从现有行获取一些值,该部分起作用。然后我使用AJAX尝试制作一个没有重复的多维数组,但有些东西不起作用。我真正想要做的是删除重复部分,重新​​排列数组和array_push新值。下面是我有:jquery每个循环成一个多个阵列,检查重复项

AJAX:

function getData(){ 
    $("#table .mainTR").each(function(){ 
     var key = $(this).find(".key").text(); 
     var sel = $(this).find(".s").val(); 
     var q = $(this).find(".q").val(); 
     $.ajax({ 
      type: "POST", 
      async: false, 
      data: {key: key, s: sel, q: q} 
     }); 
    }); 
} 

PHP:

if(isset($_POST['key'])){ 
$title = $_POST['key']; 
$s = $_POST['s']; 
$q = $_POST['q']; 
if(!empty($_SESSION['check'])){ 
    foreach ($_SESSION['check'] as $key=>$value){ 
     if(in_array($title, $value)){ 
      unset ($_SESSION['check'][$title]); 
      $_SESSION['check'] = array_values($_SESSION['check']); 
      array_push($_SESSION['check'], array("key"=>$title, "s"=>$s, "q"=>$q)); 
     } 
    } 
}else{ 
    $_SESSION['check'] = array(array("key"=>$title, "s"=>$s, "q"=>$q)); 
} 
} 

有什么不对的逻辑是什么?它似乎应该工作。尝试删除表格行时,相同的foreach循环有效。它找到正确的KEY并删除它。为什么它不在这里工作?

+1

你可否澄清一下?哪部分工作? PHP?与此同时,我注意到你为每个“#table.mainTR”解雇了$ .ajax。也许准备一个数据结构并通过$ .ajax发送一次可能是第一步。 – sixFingers 2013-05-12 14:27:57

+0

工作的部分是在jQuery中获取正确的行数据。而且,是的,我注意到,它被触发的次数与行数一样多。你会如何建议我准备?将数据组合在一起,然后在PHP中分离? – user2025469 2013-05-12 14:33:25

+0

将请求序列化为JSON,并通过PHP中的“json_decode”对其进行反序列化。另外不要使用'async:false'。 – moonwave99 2013-05-12 14:35:35

回答

0

下面是我通过搜索小时和数小时得到的答案。我避免使用序列化,因为...以及我不明白如何使用它。在JS我循环找到表中的值,并制作一个这样的数组:

function getData(){ 
    var checkArray = new Array(); 
    $("#shopCart .mainTR").each(function(){ 
     var key = $(this).find(".key").text(); 
     var sel = $(this).find(".s").val(); 
     var q = $(this).find(".q").val(); 
     checkArray.push(key); 
     checkArray.push(sel); 
     checkArray.push(q); 
    }); 
    $.ajax({ 
     type: "POST", 
     data: {ch: checkArray} 
    }); 
} 

在我的PHP是我发现了一个很酷的把戏。由于我正在控制数组中的数据,因此我知道它将包含多少个值。我发现的窍门是“array_chunk”这样的3个值我这样做:

if(isset($_POST['ch']) && (!empty($_POST['ch']))){ 
    unset($_SESSION['check']); 
    $_SESSION['check'] = array_chunk($_POST['ch'], 3); 
} 

所以我只是清除会话变量,并加入新值。这消除了所有的检查和清除以及所有这些。我相信有更好的方法可以做到这一点,但这种方法很简单,可以工作,这就是我正在寻找的。希望这可以帮助别人!