Как вызвать Javascript в Ajax Response? IE: закрыть форму div в случае успеха - PullRequest
2 голосов
/ 07 июня 2010

У меня есть форма, которая при отправке отправляет данные для проверки в другой скрипт php через ajax. Ошибки проверки возвращаются в div в моей форме. Сообщение об успешном завершении также возвращается, если проверка прошла успешно.

Проблема в том, что форма все еще отображается после отправки и успешной проверки. Я хочу спрятать div после успеха.

Итак, я написал этот простой метод CSS, который отлично работает при вызове со страницы, на которой отображается форма.

Проблема в том, что я не могу вызвать скрипт скрытия через возвращенный код. Я могу вернуть HTML как

echo "<p>Thanks, your form passed validation and is being sent</p>";

Так что я предположил, что мог бы просто повторить еще одну строку после этого

echo "window.onload=displayDiv()";
внутри тегов скрипта (которые я не могу отобразить здесь) ...

и что бы он скрывал форму div.

Это не работает. Я предполагаю, что проблема в том, что javascript возвращается неправильно и не интерпретируется браузером ...

Как я могу вызвать свой «скрытый» сценарий на странице через возвращенные данные из моего сценария проверки? Я могу вернуть текст обратно, но вызов скрипта неэффективен.

Спасибо!

Это скрипт на странице с формой ...

Я могу вызвать его, чтобы показать / скрыть что-то вроде onclick = "displayDiv ()" в то время как на форме, но я не хочу, чтобы пользователь вызывал это ... он был вызван в результате успешной проверки когда я пишу результаты обратно в div ...

<script language="javascript" type="text/javascript">
    function displayDiv()
    {
        var divstyle = new String();
        divstyle = document.getElementById("myForm").style.display;
        if(divstyle.toLowerCase()=="block" || divstyle == "")
        {
            document.getElementById("myForm").style.display = "none";
        }
        else
        {
            document.getElementById("myForm").style.display = "block";
        }
    }
    </script>

PS: я использую библиотеку mootools.js для проверки формы, если это имеет значение для синтаксиса.

AJAX-вызов:

window.addEvent('domready', function(){
$('myForm').addEvent('submit', function(e) {
new Event(e).stop();
var log = $('log_res').empty().addClass('ajax-loading');
this.send({
update: log,
onComplete: function() {
log.removeClass('ajax-loading');
}
});
});
});

Журнал Div ID - это место, где отображается текст обратного вызова ajax (ошибки проверки и сообщение об успешном завершении) и графика загрузки

Ответы [ 3 ]

1 голос
/ 07 июня 2010

Это дубликат Как заставить JS выполняться в ответе HTML, полученном с помощью Ajax? , где я предоставил выбранное решение.

var response = "html\<script type=\"text/javascript\">alert(\"foo\");<\/script>html";
 var reScript = /\<script.*?>(.*)<\/script>/mg;
 response = response.replace(reScript, function(m,m1) {
     eval(m1); //will run alert("foo");
     return "";
 });
alert(response); // will alert "htmlhtml"
0 голосов
/ 07 июня 2010
if(xmlhttp.readyState == 4 && xmlhttp.status == 200){

//Since your making php do the validation, there would be two cases,
//the first case is that the php script is not echoing any thing on success, and 
//the other case is that its echoing the error massages which will be assignedxmhttp.responseText
//so we need to check that xmlhttp.resposeText has been asigned a value.

   if(xmlhttp.resposeText){
       document.getElementById(displayContainers_id).innerHTML=xmlhttp.responseText;
   }
}
0 голосов
/ 07 июня 2010

Ваш AJAX-вызов должен иметь "успешный" обратный вызов.Похоже, вы можете просто вызвать displayDiv() в этом обратном вызове.

Также обратите внимание, что строка var divstyle = new String(); не нужна.Строки являются неизменяемыми в JavaScript, поэтому вы создаете пустой строковый объект, на который нет ссылок в следующей строке.Просто объявите переменную, когда вы назначаете ее из document.getElementById():

var divstyle = document.getElementById("myForm").style.display;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...