#javascript #jquery
#javascript #jquery
Вопрос:
Я создаю приложение и пытаюсь сохранить данные в своей базе данных. У меня много форм, но все они отправляются на одну и ту же конечную точку, мой код выглядит длинным и скучным, и я чувствую, что в будущем его будет сложно поддерживать, так что я могу сократить код, например, создать функцию, которая автоматически отправит форму, если я захочу добавитьбольше форм для моего приложения, чтобы сделать его динамичным и масштабируемым.
вот код
$('.stepNextBtn1').click(function(){
$('#FuielsImg').fadeIn()
$.ajax({
url: '/nexpost',
type: 'POST',
data: {
'_token': csrf,
'value': $('.AuthenticationKe').val(),
'key': 'AuthenticationKey'
},
dataType: 'JSON',
success: function( data ) {
$('#FuielsImg').fadeOut()
if(data.success){
$('.ShowAutCode').fadeOut()
$('.AuthenticationKe').val('')
$('.stepfield1').slideUp('slow')
$('.stepfield2').slideDown('slow')
} else{
$('.ShowAutCode').fadeIn()
}
}
})
})
$('.stepNextBtn2').click(function(){
$('#FuielsImg').fadeIn()
$.ajax({
url: '/nexpost',
type: 'POST',
data: {
'_token': csrf,
'value': $('.COTcode').val(),
'key': 'COTcode'
},
dataType: 'JSON',
success: function( data1 ) {
$('#FuielsImg').fadeOut()
if(data1.success){
$('.ShowCotCode').fadeOut()
$('.COTcode').val('')
$('.stepfield2').slideUp('slow')
$('.stepfield3').slideDown('slow')
} else{
$('.ShowCotCode').fadeIn()
}
}
})
})
$('.stepNextBtn3').click(function(){
$('#FuielsImg').fadeIn()
$.ajax({
url: '/nexpost',
type: 'POST',
data: {
'_token': csrf,
'value': $('.TAXcode').val(),
'key': 'TAXcode'
},
dataType: 'JSON',
success: function( data2 ) {
$('#FuielsImg').fadeOut()
if(data2.success){
$('.ShowTaxCode').fadeOut()
$('.TAXcode').val('')
$('.stepfield3').slideUp('slow')
$('.stepfield4').slideDown('slow')
} else{
$('.ShowTaxCode').fadeIn()
}
}
})
})
Спасибо, это действительно важно для меня
Комментарии:
1. Я имею в виду, что вы должны переместить часть запроса в служебный файл. Я бы разделил его на соответствующие части, например, показ чего-то, когда вам нужно, выполнение запросов, обработка ошибок. это должны быть отдельные части логики. Ваши функции могут определять, что нужно изменить / повлиять.
2. Можете ли вы также поделиться HTML?
Ответ №1:
Создайте функцию для выполнения всей тяжелой работы
function clickHandler(p1, p2, p3, p4, p5) {
return function() {
$('#FuielsImg').fadeIn()
$.ajax({
url: '/nexpost',
type: 'POST',
data: {
'_token': csrf,
'value': $(p1).val(),
'key': p2
},
dataType: 'JSON',
success: function(data) {
$('#FuielsImg').fadeOut()
if (data.success) {
$(p3).fadeOut()
$(p1).val('')
$(p4).slideUp('slow')
$(p5).slideDown('slow')
} else {
$(p3).fadeIn()
}
}
});
};
}
$('.stepNextBtn1').click(clickHandler('.AuthenticationKe', 'AuthenticationKey', '.ShowAutCode', '.stepfield1', '.stepfield2'))
Ответ №2:
Я не знаком с Jquery, но из вашего кода, поскольку то, что вы передаете в функцию ajax, является объектом, я думаю, вы можете создать оператор switch, который соответствующим образом устанавливает объект на основе имени класса нажатой кнопки
switch(event.target.classname) {
case '.stepNextBtn1':
obj = {...};
break;
case 'stepNextBtn2':
obj = {...};
break;
case 'stepNextBtn3':
obj = {...};
break;
default:
break
}
затем вы можете упростить свой код примерно так
$(event.target.classname).click(function(){
$('#FuielsImg').fadeIn()
$.ajax(obj)
Ответ №3:
Здесь могут помочь некоторые базовые принципы разработки программного обеспечения!
Держите свой код СУХИМ. Вы выполняете один и тот же вызов AJAX три раза. Не повторяйтесь и создайте единую функцию для обработки вызовов AJAX, а затем передайте соответствующие данные для обработки вызова AJAX и взаимодействия с пользовательским интерфейсом.
let ajaxObj = {
fieldsToClear: ['AuthenticationKe','COTcode','TAXcode'],
slideUpFields: ['stepfield1','stepfield2','stepfield3']
}
function makeAjaxCall(ajaxData) {
// Do ajax stuff here
// then your UI interactions
ajaxData.fieldsToClear.forEach(elem => {
$(elem).val('');
});
ajaxData.slideUpFields.forEach(elem => {
$(elem).slideUp('slow');
})
return(value);
}