#php #javascript #jquery #html #ajax
#php #javascript #jquery #HTML #ajax
Вопрос:
У меня проблема с моим процессом отправки jQuery AJAX.
JavaScript:
$('#myform').submit(function () {
if (validateEvenInputs()) {
$('#btnevent').attr('disabled', 'disabled');
function getVirtualDirectory() {
var vDir = document.location.pathname.split('/');
return '/' vDir[1] '/';
}
var siteAddress = location.protocol '//'
document.location.hostname getVirtualDirectory();
var load_msg = '<span>Loading process....</span>';
$("#enote").html(load_msg).slideDown();
var abc = $('#abc').val();
var def = $('#def option:selected').val();
$.ajax( {
url: "" siteAddress "page/action/",
global: false,
type: "POST",
data: ({en : abc, lv : def }),
dataType: "html",
async:false,
cache: false,
success: function($vmsg) {
$("#snote").html($vmsg).slideDown("slow");
$("#enote").empty().slideUp(200);
}
});
}
return false;
});
HTML:
<script type='text/javascript' >
$(document).ready(function() {
$('#abc').bind('keyup keydown', function() {
//run the character number check
if ($('#evname').val().length < max_chars) {
$('#evname_result').html(charnum_error).fadeIn("slow");
$('#fsub').empty().fadeIn("slow");
}
else {
//else show the cheking_text and run the function to check
$('#evname_result').html(checking_html).fadeIn("slow");
check_availability();
}
});
function check_availability() {
var abc = $('#abc').val();
var submit_html = '<label class="frfrom"><input id="btnevent" name="Submit"
type="submit" value="Submit" /></label>';
$.post("" siteAddress "page/action/", { en: abc },
function(result) {
//if the result is 1
if(result == 1) {
//show that the username is available
$('#evname_result').html('<h1 class="av">' eventname
' is Available</h1>').fadeIn("slow");
$('#fsub').fadeIn("slow", function () {
$('#fsub').html(submit_html); });
}
else {
//show that the username is NOT available
$('#evname_result').html('<h1 class="uv">' eventname
' is Not Available</h1>').fadeIn("slow");
$('#fsub').empty().fadeIn("slow");
}
});
}
});
</script>
<form name="myform" id="myform" action="
<?php echo $urlaction; ?>" method="post">
<div id="frow">
<label class="evname">Name
<input type="text" name="abc" id="abc" />
<div id="evname_result"></div>
</label>
<label class="evcat">Level
<select name="def" title="Level" id="def" >
<option selected="selected"></option>
<option value="A">Level A</option>
<option value="B" >Level B</option>
<option value="C" >Level C</option>
</select>
</label>
</div>
<div id="fsub" ></div>
</form>
Я использую PDO с MySQL для обработки базы данных для внутренней обработки. Проблема в том, что при отправке данных через HTML-форму для одного и того же поля формы добавляется двойное время, поэтому я получил избыточные данные с теми же данными поля в базе данных.
Кто-нибудь знает, как это предотвратить? Есть ли какие-либо видимые ошибки в моем коде?
Комментарии:
1.
async:false,
это зло. Вам действительно нужен синхронный AJAX?2. есть ли у вас кнопка отправки в вашей форме? если да, попробуйте изменить его на обычную кнопку. Я подозреваю, что форма отправляется кнопкой отправки по умолчанию и снова Ajax
3. Вы уверены, что ваш
return false
предотвращает отправку реальной HTML-формы? Хотите сделатьevent.preventDefault();
просто для уверенности? Я не знаю, как выглядит ваш<form>
тег, или возможно ли то, что я предлагаю, событие, но я не вижу ничего неправильного в вашем коде.4. thiefmaster: я не так уверен: p сначала я устанавливаю значение ‘true’, что после того, как я получил избыточность, я изменю его на ‘false’.
5. боуг: да, я добавляю исходный код HTML в свой вопрос, и я попробую предложить вам. спасибо.
Ответ №1:
Может быть, вы отправляете свои данные два раза с помощью ajax и html post form submit? Можете ли вы отобразить html на странице?
Комментарии:
1. я использую стандартную HTML-форму, только для кнопки отправки я отображаю ее в виде из jquery POST action, я добавляю HTML-источник в свой вопрос. Спасибо.
Ответ №2:
Кажется возможным, что ваша форма отправляется дважды, потому что вы отправляете с помощью AJAX, а затем форма отправляется снова. В этом случае вы можете довольно легко запретить форме выполнять обычную отправку, указав ей прекратить действие по умолчанию.
$('#myform').submit(function (event) { //add an event variable
event.preventDefault(); //stop default form submit action
//code for ajax form submit
Это должно остановить отправку обычной формы и использовать только ваш ajax-код.