如何将使用PHP和Ajax的数组传递给Javascript?
如果这个解释不清楚,我很难理解。 如何使用PHP & Ajax将数组发送到Javascript?我使用Ajax获取照片数组,然后我将追加到我的页面上的空白<div>
。如何将使用PHP和Ajax的数组传递给Javascript?
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;
将数据发送到成功回调,但它不” t似乎是可用的格式。
如果我在PHP做一个var_dump($photos)
,结果看起来是这样的:的json_encode
和
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"
}
我已经试过各种组合等,但是真的,我猜测和不知道它背后的理论。在这种情况下,将数据从PHP传递到Javascript的最佳方式是什么?
尝试:
$.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流行度的示例,将是:
print json_encode(array("photolist"=>$photos,"photo_owner"=>"Me!"));
然后在服务器上,你会访问这些有:
data.photolist[0]; //First photo
data.photo_owner; //The owner of the photo set
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
}
});
回报JSON本身,然后通过循环在JSON构建JS数组如下:
var array=[];
for(var key in json)
{
if(json.hasOwnProperty(key))
array.push(json[key]);
}
或者你可以简单地与json本身一起工作,需要数组的任何理由?
类似json的[0]或JSON [1]等
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,这是我们可以用数组操作的地方。但是,一定要送响应JSON格式在你的PHP,使用jsonResponse功能,可以很容易地使用,例如,你的PHP函数可以是这个样子:
function ajax_get_user() {
$userName = 'Adrian';
$active = 1;
jsonResponse(array('username' => $username, 'active' = $active));
}
以后你能得到它容易,RES .username,res.active。
我认为这应该做到这一点!
完美,谢谢。您是否愿意详细说明优化以更好地封装代码? –
当然,@Joe。如果你只是想返回一张照片列表,你有什么好。但是,如果以后你决定要返回有关每张照片的详细信息,然后关联数组,因为它导致了一个很好的方式来访问JS的数据是有用的。这样做的另一种方法可能是使每一张照片的关联数组,并返回关联数组的数组,丙氨酸:'阵列(阵列(“名称” =>“照片1”,“文件” =>“img1.jpg”), array(“name”=>“海滩周末”,“file”=>“imgs/beachphoto.jpg”))'。 – Richard
@Joe:执行上述操作的好处与您试图通过代码实现的目的相关。如果你后来发现自己做了一些令人费解的事情来恢复数据,请记住我们有过这样的对话,也许这会帮助你:-)这是否澄清了事情? – Richard