通过AJAX调用的PHP中的Javascript没有发生

时间:2011-04-20 19:48:54

标签: php javascript ajax yui

我正在使用YUI富文本编辑器并将输入的文本保存到数据库中。由于用户可以输入多个不同的文本,我使用下拉菜单让他们选择要编辑的现有数据库条目,或者创建一个新的数据库条目。为此,我调用一个处理AJAX的JS函数,使用它来从数据库中获取信息,然后显示返回的信息。

调用的PHP代码是:

$query = "SELECT * FROM tableName WHERE id='".mysql_real_escape_string($_POST['id'])."'";
$result = mysql_query($query) or die(mysql_error());
$data = mysql_fetch_assoc($result);
echo "<script type='text/javascript' language='JavaScript'>
alert('HEY HEY HEY'); //Just to see if JS is happening at all
document.getElementById('saveName').innerHTML = '$data[name]';
document.getElementById('editor').innerHTML = '$data[content]';
document.getElementById('editID').value = '$data[id]';
</script>";

当我更改选择框时,不会抛出任何错误,并且Firebug报告AJAX成功(POST 200 OK)并且响应符合我的预期:

<script type='text/javascript' language='JavaScript'>
alert('HEY HEY HEY');
document.getElementById('saveName').innerHTML = 'Default';
document.getElementById('editor').innerHTML = 'REALLY LARGE BLOB OF TEXT';
document.getElementById('editID').value = '1';
</script>

但是警报永远不会发生,内部HTML也不会改变。你能不能从AJAX加载的PHP页面调用这样的javascript吗?

2 个答案:

答案 0 :(得分:0)

你为什么不这样做:

$query = "SELECT * FROM tableName WHERE id='".mysql_real_escape_string($_POST['id'])."'";
$result = mysql_query($query) or die(mysql_error());
$data = mysql_fetch_assoc($result);
$json = array('data' => "$data");
echo json_encode($json);

然后在回调页面上(假设是jquery):

jQuery.ajax(
    {
        type: "POST",
        url: "someurl.php",
        dataType: "json",
        success: function (data) {            
            $('#saveName').innerHTML = data.name;
            $('#editor').innerHTML = data.content;
            $('#editID').value = data.value;
        }
    }
);

答案 1 :(得分:0)

您应该能够使用PHP / AJAX / Whatever动态地将内容加载到DOM中。你不能做的是修改动态加载到DOM中的HTML元素,而不运行一些软的LiveQuery(比如jquery中的live命令)。但是,有时从javascript执行动态加载的东西根本不起作用。

您在哪个上下文中加载此脚本?它可以用来定义在运行时加载的函数,然后你只需用php生成的代码调用它们。

例如,将它放在头标记

<script>
function sendAlert(input) {
   alert(input);
}

function changeInnerHtml(id,innerContent) {
   document.getElementById(id).innerHTML = innerContent;
}

function changeInnerValue(id,innerValue) {
   document.getElementById(id).value = innerValue;
}
</script>

并尝试将您的PHP代码更改为

$query = "SELECT * FROM tableName WHERE id='".mysql_real_escape_string($_POST['id'])."'";
$result = mysql_query($query) or die(mysql_error());
$data = mysql_fetch_assoc($result);
echo "<script>
sendAlert('HEY HEY HEY'); 
changeInnerHtml('saveName', '$data[name]');
changeInnerHtml('editor', '$data[content]');
changeInnerValue('editID', '$data[id]');
</script>";

不确定它是否能解决您的问题,但值得一试:)