我需要创建此列表(在javascript中):
var videoList = ['GACS1.mp4','GACS4.mp4'];
从致电DB。所以在DB中我有一个字段,我打电话来让那些mp4回来。
这是function.php,它实际上只是一个处理请求的Ajax页面。
function assignedvideos()
{
global $db_name, $path;
$uid = $_GET['uid'];
$selectedvideos = ORM::for_table('movies1')->raw_query('SELECT B.ID AS bid, B.*, LX.* FROM movies1 LX JOIN movies B ON LX.movieid = B.id JOIN locations L ON LX.locationid = L.id JOIN tablets T ON LX.locationid = T.tabletlocation WHERE T.uniqueid =".uid." ORDER BY LX.order ASC')->find_many();
if($selectedvideos)
{
foreach ($selectedvideos as $row)
{
$row['movielocation'] = stripslashes($row['movielocation']);
$row['moviename'] = stripslashes($row['moviename']);
}
}
die();
}
当然,这里是调用ajax页面来检索function.php页面来检索值。
$something = $_GET['uid'];
jQuery.ajax({
url: 'function.php',
type: "POST",
data: 'action=assignedvideos&uid='+$something,
success: function (response) {
},
error: function (response) {
}
});
问题是它是否在AJAX中构建并以字符串形式发回,如果是这样的话?
或者AJAX是否返回变量列表并在AJAX调用的成功响应中构建列表?如果是这样,那怎么样?
答案 0 :(得分:1)
为了方便自己,将要发送回客户端的任何值放入变量中,然后调用
echo json_encode($somevar);
在您的情况下,还有一个问题,
foreach ($selectedvideos as $row)
{
$row['movielocation'] = stripslashes($row['movielocation']);
$row['moviename'] = stripslashes($row['moviename']);
}
$row
在循环的每次迭代中被替换为来自$slectedvideos
中下一行的新数据,因此在foreach $row
将包含最后一行之后,您的操作基本上什么都不做来自$selectedvideos
的数据。 (另外,$row
不会修改$selectedvideos
)。如果你想修改$selectedvideos
,有很多方法可以做到这一点,但是如果没有太多改变你的代码,你可以做到
foreach ($selectedvideos as $key => $row)
{
$selectedvideos[$key]['movielocation'] = stripslashes($row['movielocation']);
$selectedvideos[$key]['moviename'] = stripslashes($row['moviename']);
}
然后
echo json_encode($selectedvideos);
然后您可以使用JSON.parse()
请注意,在这种情况下,javascript对象看起来并不完全是您希望数据的外观,而是它将是一个对象数组,array[0].movielocation
将是(如果我没有记错的话)第一部电影等的文件位置
如果您希望它完全是一个文件路径数组,那么foreach循环可能如下所示:
$output = array();
foreach ($selectedvideos as $row)
{
$output[] = stripslashes($row['movielocation']);
}
echo json_encode($output);
另请注意,在文件位置使用stripslashes会强制您将所有视频放在服务器上的同一文件夹中,或者以某种形式或形式使用mod_rewrite。