2009-06-15 71 views
0

我在这里得到的是一个Ajax.Updater原型js函数。它的工作方式很完美:原型Ajax.Updater无法正常工作延迟

new Ajax.Updater('feedback', 'contact.php', { 
    method: 'post', 
    parameters: Form.serialize($('contactForm')), 
    onFailure: reportError 
}); 

但是我想延迟一下这个过程。我问周围的原型IRC频道,这似乎要走的路:

var feedback = function() { 
    new Ajax.Updater('feedback', 'contact.php', { 
     method: 'post', 
     parameters: Form.serialize($('contactForm')), 
     onFailure: reportError 
    }); 

    new Effect.Highlight('feedback', { 
     duration: 1 
    }); 
} 
feedback.delay(1.5); 

(不要介意了Scriptaculous的效果)

有在contact.php一个回声功能,看起来像这样:

echo("Thanks for your message $_POST['Name']!"); 

应用延迟后名称不再回显!怎么了?

+0

javascript会报告错误吗?哪个?尝试Firefox的工具 - >错误控制台。 – alamar 2009-06-15 11:31:54

回答

1

好吧最后一次尝试这个。这对我的作品和你想要做什么

我的HTML文件

<html> 
    <head> 
     <title>asd</title> 
     <script type="text/javascript" src="src/prototype.js"></script> 
     <script type="text/javascript" src="src/scriptaculous.js"></script> 
     <script type="text/javascript"> 
      var feedback = function() { 
       var params = Form.serialize($('contactForm')); 
       new Ajax.Updater('feedback', 'contact.php', { 
        method: 'post', 
        parameters: params, 
        onFailure: reportError, 
        asynchronous:true 
       }); 

       new Effect.Highlight('feedback', { 
        duration: 1 
       }); 
      } 
      function reportError(request) { alert("error");} 

     </script> 
    </head> 
    <body> 
     <form id="contactForm"> 
      <p>Name:<br><input name="Name" type="text" size="30" maxlength="30"></p> 
      <input name="sendbutton" type="button" value="Send" onClick="feedback.delay(1.5);"> 
     </form> 
     <div id="feedback">foo</div> 
    </body> 
</html> 

contact.php

<?php 
echo("Thanks for your message ".$_POST['Name']."!"); 
?> 

,并使用js文件从here

0

你为什么不把这个东西换成setTimeOut调用。因此推迟了Ajax请求,而不是延迟显示。这是BTW excatly原型延时功能做什么

new Ajax.Updater.delay(2, 'feedback', 'contact.php', { 
    method: 'post', 
    parameters: Form.serialize($('contactForm')), 
    onFailure: reportError 
}); 

也应努力

+0

我试图将这个东西包装成一个没有成功的setTimeout调用。 问题是:Ajax.Updater在一个链中,并且显示本身必须被延迟。 原型的延迟函数作为参数将是最好的选择,我也尝试了一下,但萤火虫给我这个错误: __method.apply不是函数 [Break on this error] return __method.apply(__ method,args ); – richard 2009-06-15 12:36:09

0

我再试试看。

变化

echo("Thanks for your message $_POST['Name']!"); 

echo("Thanks for your message ".$_POST['Name']."!"); 

,然后再试一次。

并确保您已实现reportError功能,你在这里

onFailure: reportError 

例如通过

function reportError(request){alert('Shit happens!');} 
+0

不起作用:(reportError被定义为 – richard 2009-06-15 12:37:33

0

这并未不适用于原始问题 - 但是因为我在搜索中遇到了这个线索。想像我会发布我的结果。

我有一些代码,一个Ajax更新突然停止工作:

new Ajax.Updater('my_id, 'http://mydomain.com/my_script.php'); 

它没有为我工作,因为我是www.mydomain.com的原因(反对MYDOMAIN。COM)

我只是把它改为:

new Ajax.Updater('my_id, 'my_script.php'); 

它工作得很好。