我不知道為什么我不能讓它作業。我有一個通過 Ajax 獲取物件的代碼:
這是我的代碼:
var $form = $(document).find('#my_form');
const $objectassemblepoint = $('#my_object_assemble_point');
function convertFromDataToArray(formData) {
let data = [];
formData.forEach(function (obj) {
if (obj.value) {
// break with price
if (['min_price', 'max_price'].includes(obj.name)) {
const dataValue = $form.find('input[name=' obj.name ']').data(obj.name.substring(0, 3));
if (dataValue == parseInt(obj.value)) {
return;
}
}
data.push(obj);
}
});
return data;
}
if ($form.length) {
$(document).on('submit', '#my_form', function (event) {
event.preventDefault();
const $form = $(event.currentTarget);
const formData = $form.serializeArray();
let data = convertFromDataToArray(formData);
let uriData = [];
const $elPage = $objectassemblepoint.find('input[name=page]');
if ($elPage.val()) {
data.push({name: 'page', value: $elPage.val()});
}
data.map(function (obj) {
uriData.push(encodeURIComponent(obj.name) '=' obj.value);
});
var popStateUrl = $form.attr('action') (uriData && uriData.length ? ('?' uriData.join('&')) : '');
var addThisToEnd = '&q=luxury';
$.ajax({
url: $form.attr('action'), // Plainly: "https://mydomainname.com/joggers" from my actual form
type: 'GET',
data: data,
beforeSend: function () {
//Do stuffs before send
},
success: function (response) {
if (response.error === false) {
$objectstoadd.html(response.data);
if (popStateUrl !== window.location.href) {
window.history.pushState(data, response.message, popStateUrl);
}
} else {
showError(response.message || 'Something went wrong!');
}
},
error: function (response) {
handleError(response);
},
complete: function () {
//Some things to do
}
});
}
使用上面的代碼,當用戶選擇一種 joggeres 時,來自 Ajax 的 url 變為:
https://mydomainname.com/joggers?min_price=0&max_price=100&thetype[]=1&_=[TIMESTAMP]
但我更想要這樣的東西:
https://mydomainname.com/joggers?min_price=0&max_price=100&thetype[]=1&q=luxury&_=[TIMESTAMP]
我試過做:
$.ajax({
url: $form.attr('action') addThisToEnd // Since I have a variable with the string as above,
但一切都變得一團糟。請我對Ajax了解不多。請幫忙。
uj5u.com熱心網友回復:
您沒有提供完整的腳本來理解您的問題,但是如果您忘記了腳本中的某些內容,它將向您顯示:
編輯:函式 convertFromDataToArray 你不需要它,因為資料已經是陣列
var $form = $(document).find('#my_form');
const $objectassemblepoint = $('#my_object_assemble_point');
if ($form.length) {
$(document).on('submit', '#my_form', function (event) {
event.preventDefault();
const $form = $(event.currentTarget);
const data = $form.serializeArray();
let uriData = [];
const $elPage = $objectassemblepoint.find('input[name=page]');
if ($elPage.val()) {
data.push({ name: 'page', value: $elPage.val() });
}
data.map(function (obj) {
uriData.push(encodeURIComponent(obj.name) '=' obj.value);
});
var popStateUrl = $form.attr('action') (uriData && uriData.length ? ('?' uriData.join('&')) : '');
var addThisToEnd = {name: 'q', value:'luxury'};
data.push(addThisToEnd);
console.log($form.attr('action') '?' $.param(data));
$.ajax({
url: $form.attr('action'), // Plainly: "https://mydomainname.com/joggers" from my actual form
type: 'GET',
data: data,
beforeSend: function () {
//Do stuffs before send
},
success: function (response) {
if (response.error === false) {
$objectstoadd.html(response.data);
if (popStateUrl !== window.location.href) {
window.history.pushState(data, response.message, popStateUrl);
}
} else {
showError(response.message || 'Something went wrong!');
}
},
error: function (response) {
//handleError(response);
},
complete: function () {
//Some things to do
}
});
});
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form id="my_form" action="https://yourdomain.com/joggers">
Min price: <input type="text" name="min_price" value="20"><br>
Max price: <input type="text" name="max_price" value="100"><br>
The Type: <input type="text" name="thetype" value="test"><br>
<button type="submit">Submit</button>
</form>
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/448314.html
