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

数组的Javascript作用域并将js数组转换为php数组,javascript,php,arrays,ajax,Javascript,Php,Arrays,Ajax,编辑/澄清:我有一个php页面,称之为displayPhotos.php,其中我设置了一个对不同php页面的Ajax调用,称之为getPhotos.php,它查询数据库并将照片信息(标题、文件名等)返回到显示照片的displayPhotos.php。我在displayPhotos中使用php来处理从getPhotos返回的数据。Ajax调用返回的数据是一个javascript二维数组。我需要将javascript数组转换为php数组,这样我就可以执行它们的显示和其他操作。我该怎么做? 希望这有帮

编辑/澄清:我有一个php页面,称之为displayPhotos.php,其中我设置了一个对不同php页面的Ajax调用,称之为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: ' );
           }
        });
现在我把数组拿回来了,但它是用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>
欢迎来到历史学会历史照片档案馆
//下面的行获取我:SCRIPT5007:无法获取的属性“thumb”
//未定义或空引用
log(“photoarray thumb:”)+photoarray[0]['thumb'];

我解释得对吗?

首先,AJAX是异步的。这意味着当您向其请求时,它会发送请求,但在将来某个时候会收到响应。它在php呈现并发送页面后工作。所以当您通过AJAX获得更新时,您必须使用javascript使更新变得重要。最简单的解决方案是在成功回调中处理响应。这样,您就不需要处理全局范围(这是一种糟糕的做法)

据推测,您的HTML如下所示:

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

下面是示例,但它仅适用于DOM部分

如果您选择ajax,则不会再次传递到php,php渲染已经发生,除非您刷新,否则不会再次发生。您需要在success函数中使用新数据手动编辑/创建所需的dom我不明白,为什么需要将js数组转换为php数组,以及应该在哪里进行转换?您的响应是JSON,您必须将其解析为“photoarray=JSON.parse(photo_array)”。之后,它将由您使用,如果它保存到全局范围-那么其他脚本应该可以看到它(如果它们是在收到响应后执行的)@juvian请参阅我的说明。如何使用php和javascript数组中包含的数据创建dom?感谢您的回复。如果我理解正确,所有的php代码都是在执行javascript代码之前执行的。javascript创建Ajax请求,发送请求,并接收返回的数据。所有的php代码都已经执行了,所以我无法进行任何进一步的php处理。我没听错吧?是的。首先是PHP,然后是所有同步js,然后是异步js(事件、AJAX等)。无法确切知道何时将执行异步部分,因此它们需要执行的所有代码都应该以某种方式链接到它们。回调函数是进行链接的默认模式。也有承诺,但最好先了解回调。但是Ajax提出了一个请求。该请求由PHP处理,因此在异步js部分中运行PHP。您可以使用该php呈现html并将其发送到js。然后,您必须使用js将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 +'">');
  });
}
var photoArray = JSON.parse(photo_array);
updateDom(photoArray);