Ajax Post Doubt

时间:2010-08-10 12:46:26

标签: jquery ajax

我仍然对Ajax技术感到困惑。我仍然无法回答我的这个问题,因为我仍在努力掌握这项技术。

关于与服务器发布数据。在普通的非ajax web应用程序中,我通常在执行POST命令时执行PRG(Post-Redirect-Get)模式。我了解到,这将阻止双重提交问题,或者当用户尝试刷新页面或在浏览器上执行某些后退事务时。

在Ajax中,你没有执行重定向,因为这会破坏ajax的目的,因为这就是我所说的教程和书籍所说的

在Jquery,我执行时

$(document).ready(function(){
    $("#myForm").submit(function(){
        $.post("test.htm", function(data){
            alert("Successfully save data");
        }, "json");
        //prevent page refresh
        return false;
    });
});

并且用户执行,刷新(F5)或用户执行后退和前进浏览器事务。 我不是有双重提交问题的风险吗?浏览器是否会重新加载我的点击事件。

很抱歉,如果这听起来对其他人来说太愚蠢了,但我只是想澄清一下像我这样的新手的想法。

2 个答案:

答案 0 :(得分:3)

这取决于您放置该代码的位置,如果该代码位于按钮或其他内容的单击事件处理程序上,则重新加载页面将不会重新触发该单击。如果您只是完全按照页面(或$(document).ready函数)删除该代码,那么,是的,重新加载页面将重新提交该请求。

由于ajax是由用户操作触发的,因此除非用户执行两次该操作,否则双重提交不是问题。由于您无论如何都在处理javascript中的所有内容,因此在执行该操作一次之后,很容易删除该操作 - 或用户点击的按钮。

这有意义吗?希望有所帮助。

答案 1 :(得分:0)

通常情况下,该帖子会在javascript中发生,而不是在页面刷新中自动发生(除非代码每次都会处理它) - 例如它会作为另一个事件的一部分进行处理,例如“点击”或输入表格上的字段等。

现在,关于如何处理重复数据的帖子,如果重复数据的发布无效,则由服务器端代码逻辑构造决定。

请记住,ajax通常不是页面往返的一部分,但特别是为了避免这种情况 - 例如,您可以进行部分保存,而不需要刷新页面。