如何在Ajax响应中调用Javascript? IE:成功后关闭表单div

时间:2010-06-07 16:30:14

标签: php javascript ajax

我有一个表单,当你提交它时,它会通过ajax将验证数据发送到另一个php脚本。验证错误在我的表单中以div回显。如果验证通过,也会返回成功消息。

问题是在提交和成功验证后仍然会显示表单。我想在成功后隐藏div。

所以,我编写了这个简单的CSS方法,当从显示表单的页面调用时,该方法工作正常。

问题是我似乎无法通过返回的代码调用hide脚本。我可以返回像

这样的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 个答案:

答案 0 :(得分:1)

这是How to make JS execute in HTML response received using 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"

答案 1 :(得分:0)

您的AJAX调用应该有一个“成功”回调。看起来您只需在回调中调用displayDiv()即可。

另请注意,var divstyle = new String();行不是必需的。字符串在JavaScript中是不可变的,因此您创建一个空字符串对象,在以下行中仍未引用。从document.getElementById()分配变量时,只需声明变量:

var divstyle = document.getElementById("myForm").style.display;

答案 2 :(得分:0)

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