2011-11-03 73 views
0

我想出了一种方法来维护和结合两个列表,但是我有点困惑,究竟如何在没有存储页面的情况下显示结果。我认为.data()可能是解决方案 - 但这对我来说是新的。数据存储/访问/写入/编辑和AJAX调用

基本上我有2所列出:

<ul id="choice_1"> 
    <li><img id="c1_1" src="image_path">Option 1</li> 
    <li><img id="c1_2" src="image_path">Option 2</li> 
    <li><img id="c1_3" src="image_path">Option 3</li> 
</ul> 

<ul id="choice_2"> 
    <li><img id="c2_1" src="image_path">Option A</li> 
    <li><img id="c2_2" src="image_path">Option B</li> 
    <li><img id="c2_3" src="image_path">Option C</li> 
</ul> 
与jQuery

然后我做了一个脚本,在那里你可以点击图片,选择从左侧和右侧的列中,当图像变化的选择(S)点击并存储在两个隐藏的输入 - #hidden_1#hidden_2(这部分工作完美,并存储图像编号)。我还制作了一个按钮#transfer,点击该按钮可以获取隐藏文本输入的值,并重置选项,就好像没有选择任何东西一样。

我首先想到的是,我应该通过ajax将隐藏数据传递给#groups,但是因为我不想将数据保存在MySQL中,直到有人点击保存按钮,并且我还想处理数据(所以如果有人选择选项1和选项A + B,然后选择选项2并选择A + B,我将用PHP处理数据,以显示结果为选项1 + 2,A + B - 因为它们有效地结合在一起。然后我将使用ID值来显示选项的名称,然后我可以删除或编辑(通过将数据发回列表)组。存储数据,但我不确定如何从#groups访问它因为它通过ajax被调用。我也认为这会很方便,尤其是如果我后来在将它们存储在MySQL中后编辑这些组。我的Ajax调用下面:

var data_array = {}; 
data_array['id'] = $("#hidden_id").val(); // only used when editing 
data_array['c1'] = $("#hidden_1").val(); 
data_array['c2'] = $("#hidden_2").val(); 

$.ajax({ 
    url: "processor.php", 
    type: "POST", 
    data: data_array, 
    success: function(response){ 
     $("#groups").html(response); 
    }, 
    error: function(){ 
     $("#groups").html("<p>Could not process choices</p>"); 
    } 
}); 

processor.php我以为我可以简单地调用它$("data").data();访问.data(),但它似乎只是返回null - 虽然我当时想,即使我可以称呼它,怎么能我允许PHP处理数据,所以我想我必须通过ajax传递。但是,如何从#groups中删除某些内容,以便它不会在稍后传回并显示出来?或者如何用覆盖更新的数据覆盖数据?如果我可以在ajax调用后访问processor.php中的.data(),写入它,然后将其提供给页面的其余部分,那么这将是目标。

我希望有人能帮我弄清楚 - 我对.data()有点新,尤其是从里面有人用ajax调用。

回答

0

看来我需要做这样的事情是父:

$.ds = ""; 
$.ds = $("#data").data(JSON.parse()); // json_encode the existing php array (if there is one) 

然后,我可以访问/修改/使用下面的内processor.php更新:

$.ds.data(); 

手指交叉,我可以把它们放在一起按我想要的方式工作 - 迄今为止仅使用上面的测试数据,仍然 - 如果任何人有更好的方法,最好让我知道:)