简体   繁体   English

如何使用PHP和Ajax将数组传递给Javascript?

[英]How to pass an array using PHP & Ajax to Javascript?

Apologies if this explanation isn't clear, it's hard for me to understand too. 抱歉如果这个解释不清楚,我也很难理解。 How can I use PHP & Ajax to send an array to Javascript? 如何使用PHP和Ajax将数组发送到Javascript? I'm using Ajax to get an array of photos, which I'm then looking to append to an empty <div> on my page. 我正在使用Ajax来获取一系列照片,然后我想在我的页面上附加一个空的<div>

The jQuery looks as follows: jQuery看起来如下:

$.ajax({
    url: "<?php echo site_url('demo/getPhotos/'); ?>",
    type: 'POST',
    data: form_data,
    success: function(data) {
        alert(data);
   }

And the PHP function getPhotos looks like this: PHP函数getPhotos看起来像这样:

<?php

$photos = array();

foreach ($data as $photo) {
    array_push($photos,$photo['source']);
    }

// echo json_encode($photos); How should I be returning $photos?

If I simply echo $photos; 如果我只是echo $photos; the data is sent to the success callback, but it doesn't appear to be in a usable format. 数据被发送到成功回调,但它似乎不是可用的格式。

If I do a var_dump($photos) in PHP, the result looks something like: 如果我在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"
}

I've tried various combinations of json_encode and the like but really I am guessing and not sure of the theory behind it. 我尝试了json_encode之类的各种组合,但实际上我猜测并且不确定它背后的理论。 What's the best way to pass data from PHP to Javascript in this context? 在这种情况下,将数据从PHP传递到Javascript的最佳方法是什么?

Try: 尝试:

$.ajax({
    url: "<?php echo site_url('demo/getPhotos/'); ?>",
    type: 'POST',
    data: form_data,
    dataType:"json",
    success: function(data) {
        alert(data[0]);
   }

On the PHP side, you'll be wanting to print: 在PHP方面,你会想要打印:

print json_encode($photos);

Another thing you might try in order to better encapsulate your code, and as an example of further JSON gooodness, would be: 您可能尝试的另一件事是为了更好地封装您的代码,并作为进一步JSON gooodness的示例,将是:

print json_encode(array("photolist"=>$photos,"photo_owner"=>"Me!"));

Then on the server, you'd access these with: 然后在服务器上,您可以访问以下内容:

data.photolist[0]; //First photo
data.photo_owner;  //The owner of the photo set

I made an array $result in PHP and at the end of request. 我在PHP和请求结束时创建了一个数组$result

 echo json_encode($result); 

and in JS $.post handler function : 并在JS $.post处理函数中:

var obj = $.parseJSON(data);
var v = data.k; 

where k is key value in associative array. 其中k是关联数组中的键值。

json_encode is definitely the way to go. json_encode绝对是要走的路。 jQuery even has built-in support for parsing JSON. jQuery甚至内置了对解析JSON的支持。 You could use eg 你可以使用例如

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

return the json itself and then construct the array in js by looping over the json as follows: 返回json本身然后通过循环遍历json在js中构造数组,如下所示:

var array=[];
for(var key in json)
{    
    if(json.hasOwnProperty(key))
      array.push(json[key]);
}

Or you can simply work with the json itself any reason for needing the array? 或者你可以简单地使用json本身任何需要数组的原因?

something like json[0] or json[1] etc. 像json [0]或json [1]等。

json_encode rulez when you need this stuff. 当你需要这些东西时,json_encode rulez。

I recently learned this cool thing too! 我最近也学到了很酷的东西! Here's how you do it: 这是你如何做到的:

function jsonResponse($array) {
     header('Content-type: application/json; charset=utf-8;');
     die(json_encode($array));
}

This is optional, if you want to do it, you don't have to, but in my MVC system, I tend to write this way... So first I make an ajax request (prototype), to a script, that later calls this function jsonResponse I mentioned earlier... 这是可选的,如果你想这样做,你不需要,但在我的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...')
    }
});

This is the jscript code, notice the res.msg, this is where we can operate with array. 这是jscript代码,注意res.msg,这是我们可以用数组操作的地方。 But, be sure to send response in JSON format in your PHP, using the jsonResponse function, it's easy to use, eg, your php function can look something like this : 但是,一定要在PHP中以JSON格式发送响应,使用jsonResponse函数,它很容易使用,例如,你的php函数看起来像这样:

function ajax_get_user() {
     $userName = 'Adrian';
     $active = 1;
     jsonResponse(array('username' => $username, 'active' = $active));
}

Later you can get it easy, res.username, res.active. 稍后你可以轻松搞定,res.username,res.active。

I think this should do it! 我认为应该这样做!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM