使用ajax传递数组 - 无法打印

时间:2011-08-18 20:38:14

标签: php sql ajax parsing

我希望这个问题很简单,我似乎无法弄清楚解决方案。一直在尝试和谷歌搜索几个小时,让我疯了:)好吧,所以我有一个drag'n'drop +可排序(使用scriptaculous和原型为您的信息)在我的 index.php 。我使用此代码使用以下代码发送div中删除的项目:

<script type="text/javascript">
//<![CDATA[  
    document.observe('dom:loaded', function() {  
        var changeEffect;  
    Sortable.create("selectedSetupTop", {containment: ['listStr', 'selectedSetupTop'], tag:'img', overlap:'vertical', constraint:false, dropOnEmpty: true,
        onChange: function(item) {
            var list = Sortable.options(item).element;
            $('changeNotification').update(Sortable.serialize(list).escapeHTML());
            if(changeEffect) changeEffect.cancel();
            changeEffect = new Effect.Highlight('changeNotification', {restoreColor:"transparent" });
        },          
        onUpdate: function(list) {
            new Ajax.Request("script.php", {
                method: "post",
                parameters: { data: Sortable.serialize(list), container: list.id }
                onLoading: function(){$('activityIndicator').show(), $('activityIndicator2').hide()},
                onLoaded: function(){$('activityIndicator').hide(), $('activityIndicator2').show()},
            });             
        }
        });
    });  
// ]]>  
</script>   

之前我一直在使用此代码,所以我“知道”它会将数据发送到我的 script.php 页面。 selectedSetupTop 是包含元素的div。不要介意通知 activityIndi​​cator 。我的 script.php 页面目前看起来像这样:

parse_str($_POST['data']);  
for ($i = 0; $i < count($selectedSetupTop); $i++) {  
    $test .= $selectedSetupTop[$i];
}

echo "<script>alert('$test');</script>";

我似乎无法在警报消息中获得任何输出,它只是空白。 script.php 的目的是更新数据库中的一行,它看起来像这样:

$sql = mysql_query("UPDATE table SET row = '$arrayInStringFormat' WHERE id = '1'") or die(mysql_error());

$ arrayInStringFormat 是数组 $ selectedSetupTop 到格式(1,2,3,4)的转换。我想我会用implode或者其他东西解决这个问题,但问题是解析数组 $ selectedSetupTop 。我不是它在页面之间传递,非常感谢帮助!告诉我是否需要进一步解释。

提前致谢!

'' '' ''

编辑1

如果它会有所帮助,我之前使用过此代码,我知道会将数据发送给我并使用它。请注意,我不想像我下面那样做我的任务:

$querySetup = $_GET["s"];
parse_str($_POST['data']);  
for ($i = 0; $i < count($selectedSetupTop); $i++) {  
    $sql = mysql_query("UPDATE " . $querySetup . " SET orderId = $i, hero_selected = 'n' WHERE imageId = $selectedSetupTop[$i]") or die(mysql_error());    
}

'' '' ''

编辑2

所以它确实解析了,但我仍然有问题我无法打印它。我想以某种方式破坏阵列。

1 个答案:

答案 0 :(得分:0)

不确定AJAX如何在Scriptalicious / Prototype中工作,但您似乎没有从AJAX调用中获取数据。在jQuery中,这将是这样的,你从脚本收到的数据将作为函数的参数返回。

onLoaded: function(msg){
    $('activityIndicator').hide(),
    $('activityIndicator2').show(),
    alert(msg)
}

其次,您无法回显PHP数组,您必须将其编码为JSON:

echo json_encode($test);