ฉันต้องการเขียนจาวาสคริปต์ที่จะต่อท้ายพารามิเตอร์เข้ากับ url ปัจจุบันแล้วรีเฟรชหน้า - ฉันจะทำสิ่งนี้ได้อย่างไร
ฉันต้องการเขียนจาวาสคริปต์ที่จะต่อท้ายพารามิเตอร์เข้ากับ url ปัจจุบันแล้วรีเฟรชหน้า - ฉันจะทำสิ่งนี้ได้อย่างไร
คำตอบ:
สิ่งนี้ควรใช้งานได้ (ไม่ผ่านการทดสอบ!)
var url = window.location.href;
if (url.indexOf('?') > -1){
url += '¶m=1'
}else{
url += '?param=1'
}
window.location.href = url;
สั้นกว่าคำตอบที่ยอมรับทำแบบเดียวกัน แต่ทำให้เรียบง่าย:
window.location.search += '¶m=42';
เราไม่จำเป็นต้องแก้ไข URL ทั้งหมดเพียงแค่สตริงคำค้นหาที่เรียกว่าแอตทริบิวต์การค้นหาของตำแหน่ง
เมื่อคุณกำหนดค่าให้กับแอตทริบิวต์การค้นหาเบราว์เซอร์จะแทรกเครื่องหมายคำถามโดยอัตโนมัติและโหลดหน้าซ้ำ
window.location.search = '?param=42';
คำตอบส่วนใหญ่ในที่นี้แนะนำว่าควรต่อท้ายพารามิเตอร์เข้ากับ URL เช่นข้อมูลโค้ดต่อไปนี้หรือรูปแบบที่คล้ายกัน:
location.href = location.href + "¶meter=" + value;
วิธีนี้จะใช้ได้ดีกับกรณีส่วนใหญ่
อย่างไรก็ตาม
นั่นไม่ใช่วิธีที่ถูกต้องในการต่อท้ายพารามิเตอร์เข้ากับ URL ในความคิดของฉัน
เนื่องจากแนวทางที่แนะนำไม่ได้ทดสอบว่ามีการตั้งค่าพารามิเตอร์ใน URL แล้วหรือไม่หากไม่ระมัดระวังอาจลงเอยด้วย URL ที่ยาวมากโดยมีพารามิเตอร์เดียวกันซ้ำหลายครั้ง เช่น:
https://stackoverflow.com/?¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1
ณ จุดนี้คือจุดเริ่มต้นของปัญหา แนวทางที่แนะนำสามารถและจะสร้าง URL ที่ยาวมากหลังจากรีเฟรชหลาย ๆ หน้าจึงทำให้ URL ไม่ถูกต้อง ไปที่ลิงค์นี้เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับ URL แบบยาวความยาวสูงสุดของ URL ในเบราว์เซอร์ต่างๆคืออะไร?
นี่คือแนวทางที่ฉันแนะนำ:
function URL_add_parameter(url, param, value){
var hash = {};
var parser = document.createElement('a');
parser.href = url;
var parameters = parser.search.split(/\?|&/);
for(var i=0; i < parameters.length; i++) {
if(!parameters[i])
continue;
var ary = parameters[i].split('=');
hash[ary[0]] = ary[1];
}
hash[param] = value;
var list = [];
Object.keys(hash).forEach(function (key) {
list.push(key + '=' + hash[key]);
});
parser.search = '?' + list.join('&');
return parser.href;
}
ด้วยฟังก์ชั่นนี้คุณจะต้องทำสิ่งต่อไปนี้:
location.href = URL_add_parameter(location.href, 'param', 'value');
if(window.location.search.indexOf('¶m=') == -1) {window.location.search += '¶m=1';}
indexOf
อาจทำให้โค้ดมีความซับซ้อนโดยไม่จำเป็น
function gotoItem( item ){
var url = window.location.href;
var separator = (url.indexOf('?') > -1) ? "&" : "?";
var qs = "item=" + encodeURIComponent(item);
window.location.href = url + separator + qs;
}
รุ่นที่เข้ากันได้มากขึ้น
function gotoItem( item ){
var url = window.location.href;
url += (url.indexOf('?') > -1)?"&":"?" + "item=" + encodeURIComponent(item);
window.location.href = url;
}
โปรดตรวจสอบรหัสด้านล่าง:
/*Get current URL*/
var _url = location.href;
/*Check if the url already contains ?, if yes append the parameter, else add the parameter*/
_url = ( _url.indexOf('?') !== -1 ) ? _url+'¶m='+value : _url+'?param='+value;
/*reload the page */
window.location.href = _url;
การแก้ไขข้อบกพร่องเล็กน้อยสำหรับคำตอบที่รอบคอบของ @ yeyo ข้างต้น
เปลี่ยนแปลง:
var parameters = parser.search.split(/\?|&/);
ถึง:
var parameters = parser.search.split(/\?|&/);
ลองทำตามนี้
var url = ApiUrl(`/customers`);
if(data){
url += '?search='+data;
}
else
{
url += `?page=${page}&per_page=${perpage}`;
}
console.log(url);
นอกจากนี้:
window.location.href += (window.location.href.indexOf('?') > -1 ? '&' : '?') + 'param=1'
คำตอบของ Shlomi เพียงเส้นเดียวสามารถใช้งานได้ใน bookmarklets