Php 为什么使用AJAX提交的表单会重定向到下一页,并且错误/成功消息不会显示在同一页上的警报中?
我正在为我的网站使用PHP、Smarty、jQuery、AJAX等。以下是我使用AJAX提交的表单的HTML代码:Php 为什么使用AJAX提交的表单会重定向到下一页,并且错误/成功消息不会显示在同一页上的警报中?,php,jquery,ajax,form-submit,Php,Jquery,Ajax,Form Submit,我正在为我的网站使用PHP、Smarty、jQuery、AJAX等。以下是我使用AJAX提交的表单的HTML代码: <form name="question_issue_form" id="question_issue_form" action="http://localhost/xyz/pqr/web/control/modules/questions/question_issue.php"> <input type="hidden" name="form_sub
<form name="question_issue_form" id="question_issue_form" action="http://localhost/xyz/pqr/web/control/modules/questions/question_issue.php">
<input type="hidden" name="form_submitted" id="form_submitted" value="yes"/>
<input type="hidden" name="op" id="op" value="question_issue"/>
<input type="hidden" name="question_id" id="question_id" value="35718"/>
<table class="trnsction_details" width="100%" cellpadding="5">
<tbody>
<tr>
<td></td>
<td>
<input type="checkbox" name = "que_issue[]" value = "Question is wrong" id ="chkQueWrong">Question is wrong</input>
</td>
</tr>
<tr>
<td></td>
<td><input type="checkbox" name = "que_issue[]" value = "Answers are wrong" id ="chkAnsWrong">Answers are wrong</input></td>
</tr>
<tr>
<td></td>
<td><input type="checkbox" name = "que_issue[]" value = "Question direction is incorrect" id ="chkDirIncorrect">Question direction is incorrecct</input></td>
</tr>
<tr>
<td></td>
<td><input type="checkbox" name = "que_issue[]" value = "Other" id ="chkOther">Other</input></td>
</tr>
<tr>
<td></td>
<td class="set_message" style="display:none;"><textarea name="que_issue_comment" id = "que_issue_comment" rows="4" cols="25" maxlength="100"></textarea></td>
</tr>
<tr>
<td></td>
<td><input type="submit" name="submit" value="Submit" id="report_question_issue" class="c-btn submit_form"/></td>
</tr>
</tbody>
</table>
</form>
我提交此表单的文件(question_issue.PHP)的PHP代码如下:
$(document).ready(function() {
$('#question_issue_form').submit(function() {
var ans = confirm("Are you sure to report the question issue?");
if (!ans) {
return false;
}
var post_url = $(this).attr('action');
$.ajax({
type: "POST",
url: post_url,
data: $('#question_issue_form').serialize(),
dataType: 'json',
success: function(data) { alert(data);
var error = data.error_message;
if(error)
alert(error);
else {
alert("Question issue has been reported successfully.");
$.colorbox.close();
}
}
});
});
});
<?php
require_once("../../includes/application-header.php");
$objQuestionIssue = new QuestionIssue();
prepare_request();
$request = $_POST ;
$user_type = $_SESSION[SESSION_NAME_CONTROL][STAFF_TYPE];
if($user_type == 'super_admin' || $user_type == 'admin' || $user_type == 'data_entry_operator' || $user_type == 'owner' || $user_type == 'faculty' || $user_type == 'content_development_head' || $user_type == 'test_admin' || $user_type == 'student_admin')
$requested_user_type = 'staff';
else
$requested_user_type = 'student';
$form_data = array();
$form_data['question_id'] = $request['question_id'];
$form_data['reported_site_id'] = SITE_ID;
$form_data['reported_user_type'] = $requested_user_type;
$form_data['reported_user_id'] = $_SESSION[SESSION_NAME_CONTROL][STAFF_ID];
$form_data['que_issue'] = implode(",", $request['que_issue']);
$form_data['que_issue_comment'] = $request['que_issue_comment'];
$form_data['que_issue_date'] = time();
switch( $op ) {
case "question_issue":
if($request['form_submitted']=='yes') {
$ret = $objQuestionIssue->InsertQuetionIssue($form_data, $question_issue_error_messages);
/*If condition : If there are any errors in submission of a report question form*/
if(!$ret) {
$error_msg = $objQuestionIssue->GetAllErrors();
$data = array();
$data['error_message'] = $error_msg['error_msgs'];
$data = json_encode($data);
echo $data;
die;
/*Else condition : If there is no error in submission of a report question form*/
} else {
$data = array();
$data['success_message'] = "success";
$data = json_encode($data);
echo $data;
die;
}
} else {
$smarty->assign('question_id', $request['question_id']);
$file_to_show = 'question-issue.tpl';
}
$smarty->display($file_to_show);
break;
die;
}
?>
我面临的问题是,当我单击确认警报的Ok按钮时,表单会被提交,但json格式的错误消息或成功消息会出现在一个空白屏幕上
实际上,它们应该出现在弹出式警报中,页面不应该被重定向到其他URL。但是错误/成功消息打印在一个空白的白色页面上,页面也被重定向到question_issue.php。有人能帮我避免这些事情,并将错误/成功消息显示在同一页面上的警告框中吗?我认为您应该防止表单的默认行为,因此它不会真正提交,而只要求json:
$('#question_issue_form').submit(function(e) {
e.preventDefault();
// your code
我试过你的把戏。它正在工作,但在显示错误/成功警报消息之前,警报消息会显示“[object object]”和“Ok”按钮。这是什么?如何避免?@PHPLover您有一个
警报(数据)代码>在您的代码中。这可能就是PHP返回的对象,因为data
是JSON对象。这就像你试图提醒一个数组而不是字符串。你可能想进入某些财产。是的,那是我的错。谢谢你纠正了。你的答案已经被接受,并且也被投了赞成票。干杯