我正在使用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吗?
答案 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>";
不确定它是否能解决您的问题,但值得一试:)