我花了很多时间试图自己解决这个问题,但我很擅长使用jquery和ajax,这可能很简单......
我有一个我想提交的报价申请表,我想在提交前验证详细信息。其中一些可以在简单的JavaScript中完成,那部分工作正常。我还需要从mysql数据库中获取一些值,并验证那些我遇到问题的地方。
在我的HTML表单上,我有这一行
<form id="quoteform" onsubmit=" return validateHire()" method="post" action="quote-results.php">
调用验证脚本,该脚本包含在包含表单的页面中的单独文件中。
validateHire脚本如下:
function validateHire(){
alert("Hire Validation Script Being Called!");
// set the colllection date and time
var collectionDate = new Date ($("#collectiondate").datepicker('getDate'));
var collectionHour = ($("#collectionTime").val()).substr(0,2);
collectionDate.setHours(collectionHour);
var collectionMinute = ($("#collectionTime").val()).substr(3,4);
collectionDate.setMinutes(collectionMinute);
// set the return date and time
var returnDate = new Date ($("#returndate").datepicker('getDate'));
var returnHour = ($("#returnTime").val()).substr(0,2);
returnDate.setHours(returnHour);
var returnMinute = ($("#returnTime").val()).substr(3,4);
returnDate.setMinutes(returnMinute);
// calculate the length of hire and add additional day if necessary
var timeDiff = returnHour - collectionHour
var totaldays = Math.floor(((returnDate - collectionDate)/1000)/60/60/24);
if(totaldays <1 && totaldays >-1){
totaldays=1;
}
// if(timeDiff > 2){
totaldays = totaldays + 1;
alert(totaldays)
}
// get the collection and return day to check if it is a weekend hire
var collectionDay = collectionDate.getDay();
var returnDay = returnDate.getDay();
// validate if the hire is a friday or saturday it meets minimum length
if(collectionDay == 5 && totaldays <3){
$("#errorbox").slideDown('fast');
$("#errormessage").html("Hires Starting on a Friday Must be a Minimum of 3 Days");
return false;
}
if(collectionDay == 6 && totaldays <2){
$("#errorbox").slideDown('fast');
$("#errormessage").html("Hires Starting on a Saturday Must be a Minimum of 2 Days");
return false;
}
checkServerSide();
function checkServerSide()
{
alert("now checking server side!");
$.post("sproc-test.php",{q: totaldays, cdt: collectionDate, cTime: collectionTime, cLoc: CollectionLocation, cDay: collectionDay, cDas: collectionDateAsString, rDate: returnDate, rTime: returnTime, rLoc: returnLocation, rDay: returnDay, rdas: returnDateAsString},
function(data){
var minHire = data.minhire;
alert(minHire);
$('#testvalue').val(minHire);
}, "json");
alert("This is the end of the check server side function");
}
if($('#testvalue').val() == 1){
$("#errorbox").slideDown('fast');
$("#errormessage").html("The Hire is not long enough to meet the requried minimum!");
return false;
}
}
第一部分工作正常并提示用户输入正确的错误消息并且表单未提交但是当涉及checkServerSide函数时我遇到了问题。
php脚本应该返回一个数组,然后我尝试在帖子后访问并获取一个值并将其设置为隐藏的表单字段,以便我可以对此进行验证,但根据Firebug,实际上没有发布任何内容到我试图提交表单的页面,所以想知道我的$ post语法是否错误?此外,$ post电话之前的警报有效,但之后的警报也没有让我想知道我是否在这里搞砸了什么?虽然在查看firefox错误控制台时,没有报告错误。
我希望我已经充分解释了我想要实现的目标,但我还不够清楚,请告诉我。另外,正如我所提到的,我对此非常陌生,所以我真的很感激一个容易理解的解释我做错了什么,以及是否有更好的方法来实现这一点。
非常感谢您的帮助! :)
亲切的问候
麦克