我想从我的客户端jQuery代码向我的服务器PHP代码发送一个数组。 在jQuery方面,这就是我正在做的事情:
$.ajax( {
url: someUrl,
data: {
action: 'opensearch',
search: query,
namespace: [10, 846],
suggest: ''
},
dataType: 'json',
});
在PHP方面:
echo $params['action'] ."\r\n";
echo $params['namespace'][0] ."\r\n";
echo $params['namespace'][1] ."\r\n";
这个输出是:
opensearch
0
因此,当我设法正确打印字符串时,参数被正确发送。但是,阵列似乎没有正确发送。
我尝试在json_decode
选项中使用true
,但无效。
任何建议都是最受欢迎的。
答案 0 :(得分:1)
$.ajax( {
url: someUrl,
type:'post'
data: encodeURIComponent('action=opensearch&search=query&namespace[]=10&namespace[]=846&suggest='),
dataType: 'json',
});
PHP
$params=json_decode($_POST);
echo $params->action;
答案 1 :(得分:1)
json_decode()将有效的JSON字符串转换为对象。它每个接受三个参数 其中描述如下:
JSON字符串本身。
可选参数assoc:默认情况下,此值为false。如果改为true, json_decode会将对象转换为关联数组
深度:JSON字符串中递归结构的最大允许深度。它用了 在PHP 5.3之前是128。 PHP 5.3将此限制增加到512字节默认值。 此参数也是可选的。
$objJson = json_decode($json);
答案 2 :(得分:0)
数据未作为JSON发布,而是以正确的HTTP POST发布。
然而,PHP只会将其转换为字段名称的数组,其结构方式表明它是一个数组。尝试使用namespace: [10, 846]
"namespace[]": [10, 846]
目前,jQuery可能会发布这个:namespace=10&namespace=846
,它将无法正确转换为数组。添加方括号应该注意这一点。
答案 3 :(得分:0)
您无需解码$_POST
变量,实际上$_POST
已根据需要包含您的数据。
只需进行测试,使用以下代码创建jsonpost.php:
<?php
if (count($_POST) > 0)
{
header("Content-type: text/plain; charset=utf-8");
echo nl2br(var_export($_POST, true));
die();
}
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
</head>
<body>
<div id="target"></div>
<script type="text/javascript">
$.ajax( {
url: 'jsonpost.php',
type:'post',
data: {
action: 'opensearch',
search: 'test',
namespace: [10, 846],
suggest: ''
},
success: function(data) {
$('#target').html(data);
}
});
</script>
</body>
</html>
这将显示:
array (
'action' => 'opensearch',
'search' => 'test',
'namespace' =>
array (
0 => '10',
1 => '846',
),
'suggest' => '',
)
您的主要错误是您认为dataType
POST 您的数据为json,但实际上dataType
内容将定义 EXPECTED 要获取的数据(在调用回调时有一个已解码的对象)。
答案 4 :(得分:0)
尝试记录您收到的数据并查看收到的内容,我已使用以下代码测试了您的ajax帖子,并根据需要返回值10:
$data = $_REQUEST;
error_log($data['namespace'][0]."\n",3,"log.txt");
print_r($data['namespace'][0]);
还可以使用,错误和成功选项来查看从php脚本中获得的响应
$.ajax( {
url: 'rec.php',
data: {
action: 'opensearch',
search: "abc",
namespace: [10, 846],
suggest: ''
},
dataType: 'json',
error: function (XMLHttpRequest, textStatus, errorThrown) {
console.log(JSON.stringify(XMLHttpRequest));
console.log(JSON.stringify(textStatus));
console.log(JSON.stringify(errorThrown));
},
success: function (data) {
console.log(JSON.stringify(data));
}
});
});
答案 5 :(得分:0)
您正在发送表单数据,因此它不会是json_encoded。
$.ajax( {
url: someUrl,
data: {
json_string: JSON.stringify({
action: 'opensearch',
search: query,
namespace: [10, 846],
suggest: ''
})
},
dataType: 'json',
});
然后在PHP端
$data = json_decode($params['json_string'], true);