编辑/澄清:我有一个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>
我能正确解释这个吗?
答案 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部分