热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

javascript–如何在AJAX调用后继续提交表单?

我想在点击提交按钮时验证WordPress帖子上的用户条目,显示有问题的错误消息,如果一切正常,则提交表单.我有一个PHP函数来执行检查,如果form_data中的数据正常则返回true,否则返回一些

我想在点击提交按钮时验证WordPress帖子上的用户条目,显示有问题的错误消息,如果一切正常,则提交表单.我有一个PHP函数来执行检查,如果form_data中的数据正常则返回true,否则返回一些错误代码.以下Javascript发布了AJAX请求,并且应该在成功检查后继续提交表单,但它不会:

jQuery(document).ready(function() {
jQuery('#post').submit(function() {var form_data = jQuery('#post').serializeArray();var data = { action: 'ep_pre_submit_validation', security: '', form_data: jQuery.param(form_data),};var proceed = false;jQuery.post(ajaxurl, data, function(response) { if (response.indexOf('true') > -1 || respOnse== true) { proceed = true; } else { alert("Error: " + response); proceed = false; }});jQuery('#ajax-loading').hide();jQuery('#publish').removeClass('button-primary-disabled');return proceed; //breakpoint here makes the code run
});
});

该代码改编自WPSE question,由于表单未提交,因此最初对我不起作用.我发现如果绑定到.submit()的jQuery函数返回true,那么应该提交表单,这就是我试图实现的.使用上面的代码,它似乎一开始就不起作用(当没有错误时表单不会被提交),但是在使用Firebug进行仔细检查后,如果在返回时插入断点,则似乎得到了正确的结果线.只有在我遇到断点时稍稍等了一下,然后继续执行它才能按预期使用有效数据.如果有错误,则会发出警报而不会出现问题.

处理这个问题的最佳方法是什么?

编辑

根据下面的@Linus答案,以下代码适用于有效和无效数据:

jQuery(document).ready(function() {
jQuery('#post').submit(function() {if(jQuery(this).data("valid")) { return true;}var form_data = jQuery('#post').serializeArray();var data = { action: 'ep_pre_submit_validation', security: '', form_data: jQuery.param(form_data),};jQuery.post(ajaxurl, data, function(response) { if (response.indexOf('true') > -1 || respOnse== true) { jQuery("#post").data("valid", true).submit(); } else { alert("Error: " + response); jQuery("#post").data("valid", false); } //hide loading icon, return Publish button to normal jQuery('#ajax-loading').hide(); jQuery('#publish').removeClass('button-primary-disabled');});return false;
});
});

解决方法:

简短回答:你不能 – 不是这样.

一些背景:作为$.post等函数的参数提供的回调是异步执行的.这意味着您将在执行成功回调之前返回继续,并且继续将始终为false.使用断点,如果等到成功回调已执行,则继续将为true,一切都会正常.

因此,如果您想在ajax请求完成后提交表单,则必须使用Javascript提交.使用jQuery非常简单,只需使用数据执行jQuery $.post:$(“yourForm”).serialize()和url:yourForm.action.

这基本上就是您已经在做的事情,您只需要重复调??用您实际想要发布数据的URL.

编辑:

另一种方法是在表单上设置一个属性,比如说有效,并在提交处理程序中检查:

jQuery("#post").submit(function() {
if($(this).data("valid")) {
return true;
}
// Rest of your code
});

在验证ajax请求的成功回调中,您将设置/清除该属性,然后提交:

$("#post").data("valid", true).submit();

编辑:

出于上述相同的原因,您还希望在$.post的回调中启用“ajax-loading”/按钮,因为它们会在您的ajax调用返回之前立即发生.


推荐阅读
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文总结了Java中日期格式化的常用方法,并给出了示例代码。通过使用SimpleDateFormat类和jstl fmt标签库,可以实现日期的格式化和显示。在页面中添加相应的标签库引用后,可以使用不同的日期格式化样式来显示当前年份和月份。该文提供了详细的代码示例和说明。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 如何在php中将mysql查询结果赋值给变量
    本文介绍了在php中将mysql查询结果赋值给变量的方法,包括从mysql表中查询count(学号)并赋值给一个变量,以及如何将sql中查询单条结果赋值给php页面的一个变量。同时还讨论了php调用mysql查询结果到变量的方法,并提供了示例代码。 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • 原文地址http://balau82.wordpress.com/2010/02/28/hello-world-for-bare-metal-arm-using-qemu/最开始时 ... [详细]
  • XMLhttpREquest_Ajax技术总结之XmlHttpRequest
    Ajax1、 什么是ajax   ... [详细]
  • 关于extjs开发实战pdf的信息
    本文目录一览:1、extjs实用开发指南2、本 ... [详细]
author-avatar
神话海青_769
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有