【问题标题】:Prototype Ajax.Request not excecuting in some cases原型 Ajax.Request 在某些情况下不执行
【发布时间】:2011-12-29 23:57:14
【问题描述】:

在我的 index.php 底部,我在成对的 <script> 标签之间有一个 Javascript 函数。我有一个点击处理程序,它调用发出Prototype.js Ajax 请求的函数。

尽管调用了myFunction 本身,但此版本不起作用(未发出请求)。

function myFunction(fr, fw) {
    new Ajax.Request('/ascript', {
        method: 'post',
        parameters: { a: fr, b: fw }, 
        onSuccess: function(transport) { }, 
        onFailure: function(request) { }
    });
}

但是,当我添加警报时(“某事”);行 ascript php 脚本被调用。

function myFunction(fr, fw) {
    new Ajax.Request('/ascript', {
        method: 'post',
        parameters: { a: fr, b: fw }, 
        onSuccess: function(transport) { alert("here"); }, 
        onFailure: function(request) { }
    });
}

可能是一些奇怪的空白问题?我的语法有错误吗?

【问题讨论】:

  • 你怎么知道请求没有发出?您是否尝试过安装 Firefox“TamperData”插件来跟踪 HTTP 请求,甚至是 Firebug?像这样简单地更改回调应该不会影响是否发出 HTTP 请求,所以要么 正在发出,要么第二次测试有其他不同之处。
  • 发出请求的脚本是我自己的,而且我那里有error_log语句,我可以看到它没有被执行。

标签: javascript prototypejs


【解决方案1】:

您应该尝试onComplete 事件。原型有时不属于onSuccessonFailure 但所有请求都将被onComplete 覆盖

也可以尝试使用 Try - Catch 块包装 ajax 请求,这可能会有所帮助。

【讨论】:

  • try catch 没有帮助,将 alert("Blah") 添加到 onComplete 以相同的结果结束 - 事情开始工作了。但我不想在每次请求完成时都显示警报:)
【解决方案2】:

所以我找到了问题所在。问题在于我如何将事件处理程序添加到我的“按钮”

最初(在我的问题中给出的两个例子中)我有:

echo "<a href='' ><p id='button' onclick='myFunction(" .$a .", " .$b.");'>Click</p></a>";

带有链接标签的&lt;p&gt; 周围当然是个坏主意...

这行得通:

echo "<a href='' onClick='Event.stop(event);'><p id='button' onclick='myFunction(" .$a .", " .$b .");'>Click</p></a>";

感谢大家的回答。我想这个故事的寓意是,远离 Javascript 本身,看看它在哪里被调用以及那里可能被破坏的地方。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多