道歉,如果这个解释不清楚,我也很难理解。 我如何使用PHP&amp; Ajax将数组发送到Javascript?我正在使用Ajax来获取一系列照片,然后我要将其附加到我页面上的空<div>
。
jQuery看起来如下:
$.ajax({
url: "<?php echo site_url('demo/getPhotos/'); ?>",
type: 'POST',
data: form_data,
success: function(data) {
alert(data);
}
PHP函数getPhotos看起来像这样:
<?php
$photos = array();
foreach ($data as $photo) {
array_push($photos,$photo['source']);
}
// echo json_encode($photos); How should I be returning $photos?
如果我只是echo $photos;
数据被发送到成功回调,但它似乎没有可用的格式。
如果我在PHP中使用var_dump($photos)
,结果类似于:
array(4) {
[0]=>
string(14) "some_image.jpg"
[1]=>
string(14) "some_image.jpg"
[2]=>
string(14) "some_image.jpg"
[3]=>
string(14) "some_image.jpg"
}
我尝试了json_encode
之类的各种组合,但实际上我猜测并且不确定它背后的理论。在这种情况下,将数据从PHP传递到Javascript的最佳方法是什么?
答案 0 :(得分:23)
尝试:
$.ajax({
url: "<?php echo site_url('demo/getPhotos/'); ?>",
type: 'POST',
data: form_data,
dataType:"json",
success: function(data) {
alert(data[0]);
}
在PHP方面,你会想要打印:
print json_encode($photos);
为了更好地封装代码,您可能会尝试的另一件事,以及作为进一步JSON gooodness的示例,将是:
print json_encode(array("photolist"=>$photos,"photo_owner"=>"Me!"));
然后在服务器上,您可以通过以下方式访问它们:
data.photolist[0]; //First photo
data.photo_owner; //The owner of the photo set
答案 1 :(得分:10)
我在PHP中和请求结束时创建了一个数组$result
。
echo json_encode($result);
和JS $.post
处理函数:
var obj = $.parseJSON(data);
var v = data.k;
其中k
是关联数组中的键值。
答案 2 :(得分:2)
json_encode
绝对是最佳选择。 jQuery甚至内置了对解析JSON的支持。你可以使用例如。
$.ajax({
url: "<?php echo site_url('demo/getPhotos/'); ?>",
type: 'POST',
data: form_data,
dataType: 'json', // will automatically convert array to JavaScript
success: function(array) {
alert(array[0]); // alerts first string
}
});
答案 3 :(得分:0)
返回json本身然后通过循环遍历json在js中构造数组,如下所示:
var array=[];
for(var key in json)
{
if(json.hasOwnProperty(key))
array.push(json[key]);
}
或者你可以简单地使用json本身任何需要数组的原因?
类似于json [0]或json [1]等。
答案 4 :(得分:0)
json_encode rulez。
我最近也学到了很酷的东西!这是你如何做到的:
function jsonResponse($array) {
header('Content-type: application/json; charset=utf-8;');
die(json_encode($array));
}
这是可选的,如果你想这样做,你不需要,但在我的MVC系统中,我倾向于这样写...所以首先我做一个ajax请求(原型),到脚本,后来我之前提到过调用这个函数jsonResponse ...
new Ajax.Request('URL',
{
method:'post',
onSuccess: function(transport){
res = transport.responseJSON;
$('actionInformation').update(res.username);
},
onFailure: function(){
alert('Something went wrong...')
}
});
这是jscript代码,注意res.msg,这是我们可以用数组操作的地方。但是,一定要在PHP中以JSON格式发送响应,使用jsonResponse函数,它很容易使用,例如,你的php函数看起来像这样:
function ajax_get_user() {
$userName = 'Adrian';
$active = 1;
jsonResponse(array('username' => $username, 'active' = $active));
}
稍后你可以轻松搞定,res.username,res.active。
我认为应该这样做!