Javascript范围的数组和将js数组转换为php数组

时间:2016-06-29 16:17:09

标签: javascript php arrays ajax

编辑/澄清:我有一个php页面,称之为displayPhotos.php,其中我设置了一个Ajax调用到不同的php页面,调用它getPhotos.php,它查询数据库并将照片信息(标题,文件名等)返回到displayPhotos.php,显示它们。我在displayPhotos中使用php来操作从getPhotos返回的数据。来自Ajax调用的返回数据是一个javascript二维数组。我需要将javascript数组转换为php数组,以便我可以显示和其他东西。我怎么做? 希望这会有所帮助。

阅读所有文档后,我的眼睛受伤了。

我想使用ajax查询数据库,返回数据然后使用php继续使用网页。

我所看到的所有示例都始于在php中创建json。我需要从javascript中的json对象开始。

   <script>
   var photoarray = [];
   var ajaxRequest = $.ajax
        ({
          url : "fhs_get_photos.php",
          type: "POST",
          dataType: "json",
          success: function(photo_array)
           {
              photoarray = photo_array;
            //line below works. the file name is correct but disappears 
            //outside of this function
           console.log("photoarray[0][file_name] is: " + photoarray[0]['file_name']); 
           },

          error: function(request, status, error) 
           {  
              alert('An error occurred: ' );
           }
        });

在这种情况下,我没有将任何内容传递给查询db的php文件。控制台日志显示photoarray中的文件名是正确的,但是一旦在此函数之外它就会消失,即使它被声明为全局,我认为无论如何。为什么以及我需要做些什么来解决这个问题。

php文件只执行SELECT * FROM .....并返回所有内容。

    // in fhs_get_photos.php
    // SELECT * FROM table......
   echo $json = json_encode($result);
   return $json;

所以我现在有了数组,但它在javascript中。一旦我弄清楚范围问题,我该如何将这个javascript数组转换为php数组呢?

    <h3>Welcome to the Historical Society's historical photo archive
    </h3>
    </header>
    <figure id="photo_figure">
        <script>
        //line below gets me: SCRIPT5007: Unable to get property 'thumb' of
        //undefined or null reference
        console.log("photoarray thumb: ") + photoarray[0]['thumb'];
        </script>

我能正确解释这个吗?

1 个答案:

答案 0 :(得分:1)

首先,AJAX是异步的。这意味着它会在您提出请求时发送请求,但在将来某个时间收到响应。它在php渲染并发送页面后起作用。所以。当您通过AJAX获得更新时,您必须使用javascript来进行更新。最简单的解决方案是在成功回调中处理响应。这样你就不需要弄乱全局范围(这是一种不好的做法)。

据说,你的HTML是这样的:

   <header>
     <h3>Welcome to the Historical Society's historical photo archive
     </h3>
   </header>
   <div id="figures"></div>

您可以通过声明处理处理的函数来执行此操作:

function updateDom(photoArr) {
  var $figures = $('#figures');

  $.each(photoArr, function() {
    console.log(this);
    $figures.append('<img src="' + this.thumb +'">');
  });
}

以下代码放置在成功回调

在成功回调中执行该函数,并从json传递数组,该数组已被解析并成为有效的js对象。

var photoArray = JSON.parse(photo_array);
updateDom(photoArray);

这里是fiddle,但它只适用于DOM部分