我想使用$ .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
转换为什么才能正确发送数据?
答案 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数组旨在使用数字“键”。