需要帮助$ .ajax函数 - 如何发送关联数组?

时间:2010-08-03 02:02:55

标签: php javascript jquery ajax

我想使用$ .ajax发送数据,如下所示:

$.ajax({'url': 'my.php',
        'type': 'POST',
        'data': arr,
        'success': function(response) {
                      alert(response);
                   }
});

问题是arr是一个关联数组,如下所示:

arr['description_0'] = 'very nice picture!';
arr['tags_0'] = 'David "Nice Picture" 2010';
arr['description_1'] = 'In the pool';
arr['tags_1'] = '"April 2010" Australia';
    .                    .
    .                    .
    .                    .

如果my.php看起来像:

<?php
echo count($_POST);
?>

response为0。

但是,如果我改变了

'data': arr,

'data': 'a=chess&b=checkers',

response是2,正如预期的那样。

我应该将arr转换为什么才能正确发送数据?

4 个答案:

答案 0 :(得分:3)

如果您真的遇到问题,请尝试阅读$.param()


另外,我发现,你是如何初始化arr变量的?

您应该将其初始化为var arr = {};,然后将其作为'data': arr,传递。尝试查看firebug或webket的开发工具,以查看服务器post的数据。

答案 1 :(得分:0)

AJAX数据实际上只是Javascript“静默”完成的常规GET或POST请求。因此,数据必须形成为正常的GET或POST,这意味着它必须是key=value格式。您的'data' = arr是一个值,但没有密钥,因此PHP无法自动将其分配给$ _POST。就PHP而言,它只会收到一长串文本。

您可以通过阅读$ HTTP_POST_RAW_DATA来检索数据,如果您的PHP配置为设置该数据,或通过$data = file_get_contents('php://input');

答案 2 :(得分:0)

我遇到了同样的问题,这是迄今为止评论中未提及的解决方案:

$.ajax({
       'url': 'my.php',
            'type': 'POST',
            'data': {
                id: 1792,
                arr[description_0] : 'very nice picture!', // DON'T quote the array key
                arr[tags_0] = 'David "Nice Picture" 2010',
             },
            'success': function(response) {
                 alert(response);
            }
    });

答案 3 :(得分:-1)

另一种选择是序列化为JSON并在服务器上反序列化JSON:

http://code.google.com/p/jquery-json/

数据:$ .toJSON(arr)

注意:您不需要引用$ .ajax中的键({url:...,data:...})

另外你应该使用一个对象,因为JavaScript中没有关联数组。 JavaScript数组旨在使用数字“键”。