2010-08-03 73 views
0

我想送使用$阿贾克斯的数据是这样的:

$.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转换为数据才能正确发送?

+1

这工作就好了原样。你有特定的问题吗? – hobbs 2010-08-03 02:04:31

+0

是的,我更新了问题。 – 2010-08-03 02:20:31

+0

by arr being'associative array',我假设你的意思是一个JavaScript对象? – JAL 2010-08-03 02:38:43

回答

3

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


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

您应将其初始化为var arr = {};,然后将其作为'data': arr,传递给它。尝试查看萤火虫或webkit的开发工具,看看服务器上有哪些数据正在被post编辑。

-1

另一种选择是序列化JSON和服务器上的反序列化JSON:

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

数据:$ .toJSON(ARR)

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

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

0

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

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

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); 
      } 
    });