Sha*_*ban 9 php regex ajax wordpress jquery
我在WordPress中使用ajax和jquery验证带有正则表达式的注释textarea的表单.但是当我想用返回false来警告错误消息时会出现问题.它工作正常,无效数据和显示警报,并没有提交.但是当我输入有效数据时,表格不会提交.可能是返回false的问题.
我尝试制作变量并存储true和false并将条件应用于ajax成功块但不适用于我.
当我使用核心php,ajax,jquery而不是在WordPress中工作时它工作正常.
这是我的ajax,jquery代码.
require 'nmp_process.php';
add_action('wp_ajax_nmp_process_ajax', 'nmp_process_func');
add_action('wp_ajax_nopriv_nmp_process_ajax', 'nmp_process_func');
add_action('wp_head', 'no_markup');
function no_markup() {
?>
<script type="text/javascript">
jQuery(document).ready(function () {
jQuery('form').submit(function (e) {
var comment = jQuery('#comment').val();
jQuery.ajax({
method: "POST",
url: '<?php echo admin_url('admin-ajax.php'); ?>',
data: 'action=nmp_process_ajax&comment=' + comment,
success: function (res) {
count = res;
if (count > 10) {
alert("Sorry You Can't Put Code Here.");
return false;
}
}
});
return false;
});
});
</script>
<?php
}
Run Code Online (Sandbox Code Playgroud)
我正在使用wordpress wp_ajax hook.
这是我的PHP代码.
<?php
function nmp_process_func (){
$comment = $_REQUEST['comment'];
preg_match_all("/(->|;|=|<|>|{|})/", $comment, $matches, PREG_SET_ORDER);
$count = 0;
foreach ($matches as $val) {
$count++;
}
echo $count;
wp_die();
}
?>
Run Code Online (Sandbox Code Playgroud)
提前致谢.
最后,我只能自己想办法了。
只需放入async: falseajax调用即可。现在它运行良好。另外创建一个空变量并在其中存储布尔值,然后在 ajax 调用后返回该变量。
这是我之前的代码:
require 'nmp_process.php';
add_action('wp_ajax_nmp_process_ajax', 'nmp_process_func');
add_action('wp_ajax_nopriv_nmp_process_ajax', 'nmp_process_func');
add_action('wp_head', 'no_markup');
function no_markup() {
?>
<script type="text/javascript">
jQuery(document).ready(function () {
jQuery('form').submit(function (e) {
var comment = jQuery('#comment').val();
jQuery.ajax({
method: "POST",
url: '<?php echo admin_url('admin-ajax.php'); ?>',
data: 'action=nmp_process_ajax&comment=' + comment,
success: function (res) {
count = res;
if (count > 10) {
alert("Sorry You Can't Put Code Here.");
return false;
}
}
});
return false;
});
});
</script>
<?php
}
Run Code Online (Sandbox Code Playgroud)
我解决的问题是,
新代码
var returnval = false;
jQuery.ajax({
method: "POST",
url: '<?php echo admin_url('admin-ajax.php'); ?>',
async: false, // Add this
data: 'action=nmp_process_ajax&comment=' + comment,
Run Code Online (Sandbox Code Playgroud)
我为什么使用它
Async:False将保留其余代码的执行。一旦你得到ajax的响应,只有这样,其余的代码才会执行。
然后简单地将布尔值存储在变量中,如下所示,
success: function (res) {
count = res;
if (count > 10) {
alert("Sorry You Can't Put Code Here.");
returnval = false;
} else {
returnval = true;
}
}
});
// Prevent Default Submission Form
return returnval; });
Run Code Online (Sandbox Code Playgroud)
就是这样。
顺便感谢您的回答。
| 归档时间: |
|
| 查看次数: |
990 次 |
| 最近记录: |