Javascript в PHP вызывается через AJAX не происходит - PullRequest
0 голосов
/ 20 апреля 2011

Я использую YUI Rich Text Editor и сохраняю введенный текст в базу данных. Поскольку пользователь может вводить несколько разных текстов, я использую раскрывающийся список, чтобы позволить им выбрать существующую запись в базе данных для редактирования или создать новую. Для этого я вызываю функцию JS, которая обрабатывает AJAX, использую ее для получения информации из базы данных, а затем отображаю возвращенную информацию.

Код 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 не меняется. Разве вы не можете вызвать javascript подобным образом со страницы PHP, загруженной AJAX?

Ответы [ 2 ]

0 голосов
/ 21 апреля 2011

Вы должны быть в состоянии загружать вещи в DOM динамически с PHP / AJAX / что угодно. Что вы не можете сделать, это изменить элементы HTML, динамически загружаемые в DOM, без запуска некоторой программы LiveQuery (например, команды live в jquery). Однако иногда выполнение динамически загружаемого материала из javascript просто не работает.

В каком контексте вы загружаете этот скрипт? Это может сработать, определив функции, которые загружаются во время выполнения, тогда вы просто вызываете их с помощью своего сгенерированного php кода.

Например, поместите это в тег head

<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>";

Не уверен, что это решит вашу проблему, но, возможно, стоит попробовать:)

0 голосов
/ 21 апреля 2011

Почему бы вам не сделать что-то вроде:

$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;
        }
    }
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...