问候stackoverflow社区。我是一个很长时间的潜伏者,也是第一次海报。我花了几个小时做研究试图克服以下问题,显然没有成功,因为我在这里发布。应该注意的是,我只用了几个月的jQuery(或任何JS)进行编码。
我的目标是:使用.ajax()提交一个简单的表单,然后提醒(成功!)并返回true(重新加载页面),如果返回的成功数据=='成功',或填充div错误消息,否则返回false。
我在研究过程中尝试了许多不同的方法,但无论我尝试过什么,我都可以对成功进行评估:数据返回真实。
这是我最近的尝试:
$(document).ready(function() {
$('#error').hide();
$("#submit_result").submit(function() {
var postString = $('#submit_result').formSerialize(); /* Function from jQuery.form.js */
$.ajax({
url: 'inc/submit_speedtest.inc.php',
type:'POST',
data:postString,
success: function(msg) {
$('#error').html(msg);
},
error:function() {
$('#error').html('Error validating CLid!');
}
});
if ($('#error').html() == 'Success') {
alert('Done');
return true;
}
$('#error').show();
return false;
});
});
一切都很好,除了:
if ($('#error').html() == 'Success') {
alert('Done');
return true;
}
此测试永远不会评估为true。我尝试了很多不同的方式,包括
之类的东西if $("#error:contains('Success')") {
submit_speedtest.inc.php的内容:
<?php
session_start();
include('lib.inc.php');
restrict_unauthorized();
if(!empty( $_POST['clid'])) {
$clid = trim($_POST['clid']);
$result = check_clid($clid);
echo $result;
}else{
echo "No CLid!";
}
?>
check_clid()函数运行一个简单的MySQL查询以确保CLid存在。如上所述,这似乎工作正常
我希望这一切都有意义,我非常感谢stackoverflow社区可以为我提供的任何帮助。
修改
感谢您的投入。我能够从你的回复中收集到有用的信息。您让我更好地了解了回调的工作原理。
这是我最终得到的jQuery代码:
$(document).ready(function() {
$('#status_msg').hide();
$("#submit_result").submit(function(e){
e.preventDefault();
var postString = $('#submit_result').formSerialize();
$.ajax({
url: 'inc/submit_speedtest.inc.php',
type:'POST',
data:postString,
success:function(msg) {
$('#status_msg').html(msg);
$('#status_msg').show();
},
error:function() {
$('#status_msg').html('<font color="red">Error validating CLid!</font>');
$('#status_msg').show();
}
});
});
});
PHP完成剩下的工作,一切正常。
再次感谢。
答案 0 :(得分:1)
$ ajax是异步的,因此您不能返回任何内容,您应该以不同的方式组织代码。
$("#submit_result").submit(function(e){
e.preventDefault();
var postString = $('#submit_result').formSerialize();
$.ajax({
url: 'inc/submit_speedtest.inc.php',
type:'POST',
data:postString,
success: function(msg) {
$('#error').html(msg);
alert('Done');
$('#error').show();
//do whatyou need to do after you have succesfully vompleted the ajax request
},
error:function() {
$('#error').html('Error validating CLid!');
$('#error').show();
}
});
});
代码
if $("#error:contains('Success')")
将始终为false,因为它在调用ajax函数后立即执行,而不等待函数完成。您可以在async
调用中将false
属性设置为$.ajax()
以使调用同步,但这会违反ajax的实用程序
答案 1 :(得分:0)
在提交完成之后,才会运行成功和错误回调。
你应该做什么只是在提交回调中返回false,然后在你的ajax请求的适当回调中完成剩下的逻辑:
$("#submit_result").submit(function() {
var postString = $('#submit_result').formSerialize(); /* Function from jQuery.form.js */
$.ajax({
url: 'inc/submit_speedtest.inc.php',
type:'POST',
data:postString,
success: function(msg) {
// call submit directly on the form
$("#submit_result")[0].submit();
},
error:function() {
// display error message
$('#error').html('Error validating CLid!').show();
}
});
// return false to stop the submit
return false;
});