数组的Javascript作用域,并将js数组转换为php数组

Javascript scope of array and converting js array to a php array

本文关键字:数组 转换 php js Javascript 作用域 并将      更新时间:2023-09-26

编辑/澄清:我有一个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: ' );
           }
        });

在这个例子中,我没有传递任何东西到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>

我解释得对吗?

首先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);

这里是小提琴,但它只用于DOM部分