在Javascript之后发出运行PHP代码的问题

时间:2011-07-01 17:13:39

标签: php javascript mysql ajax

基本上,这就是我在做的事情: 我有一个flash / ajax文件上传器,用户可以选择x量的照片并上传它们,然后通过外部php脚本将它们插入到MYSQL数据库中。

将它们插入数据库后,我想在页面上显示它们,并允许用户编辑标签,标题等。

但是,我无法弄清楚如何“实时更新”页面以显示正确的数据

以此为例: showFields()在上传完成后运行;

function showFields() {

     var jsvar = '<?php echo getIDs(); ?>';

     document.getElementById('picndata').innerHTML += jsvar;    
}

如果我有getID只返回一个静态值,例如“test”

,它将起作用

但如果我要这样做:

function getIDs() {

    $SQL = "SELECT * FROM `slides` ORDER BY `sid` DESC";
    $results = mysql_query($SQL);
    $row = mysql_fetch_assoc($results);
    $slide = $row['sid'];

    $SQL = "SELECT * FROM `slides` WHERE `sid` = $slide";

    $results = mysql_query($SQL);
    $str;

    while ($row = mysql_fetch_array($results)) {
        $str .= $row['size'] . "\r\n";
    }

    return $str; 
}

(我知道马虎)

,然后它将无法工作,因为PHP首先运行,因此它没有找到任何结果,因为图像尚未上传!

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

这一行:

$str .= $row['size'] . "\r\n";

将导致您的JavaScript具有未终止的字符串文字。

变化:

var jsvar = '<?php echo getIDs(); ?>';

要:

var jsvar = '<?php echo str_replace("\r\n", "\\\r\n", trim(getIDs()) ?>';

这会将斜杠放在适当的位置,以便JavaScript有效。或者,您可以使用空格或逗号或任何最适合您代码的内容替换换行符,而不是添加反斜杠。

答案 1 :(得分:0)

使用ajax和时间戳图像。
我个人有一个'刷新'功能,可以通过setTimeout()定时调用。

在初始加载当前图像时,确定最新的图像时间戳。 在你的ajax中,查询带有时间戳&gt;的图像。之前的“最新”时间戳。如果您得到任何结果,请更新页面,并重置您的新“最新”变种 如果您从上传功能中获得一些可用于触发ajax的返回功能,则可以消除查看新图像的任何延迟。

我还建议将该时间戳存储在会话变量中,这样您就不会依赖于查询的用户输入。

还处理其他用户可以上传到同一区域的并发性。