我一直没有找到一个可行的例子或者一个好的解释,来说明如何实现以下内容:(非常感谢任何人能够指引我正确的方向。)
我有一个查询字符串:**"/api/bla?sources=[1,2]&plans=[1,2]&codes=[1,2,3]"**
当我的页面上发生某些事件时,我会通过javascript或者jquery来更新查询字符串,无论使用哪个都可以。
例如,页面上有一个多选下拉列表,其中包含 [sources]、[plans] 和 [codes]... 这些下拉列表有ID,我将在选择下拉列表中的项目时,更新请求URL。
当从下拉列表中选择了一个ID为“3”的源(或复选框,不管使用哪种页面控件),则需要添加“3”到查询字符串参数 sources[1,2] 中。同样地,如果取消选择ID为“2”的项,则该项也将从查询字符串中删除,留下新字符串 sources[1,3]
我对JavaScript / jQuery以及更高级的字符串操作还比较陌生。我一直在尝试重建一些东西来证明这一点,并得到了以下尚不完全工作的结果。
基本上我的初始if语句按预期工作,但是一旦 else 被触发(需要将另一个ID添加到查询字符串中的现有模型中 - 就像[sources]或者[codes]的第二个ID),它就会返回奇怪的输出——因为我无法获取正确的公式以正确地更新所有内容。
//TIMEMTABLE QUERY
function updateCalendar(filter_id, filter_element) {
//Run through the filter checks before making final call to query and update timetable?
//GET THE MODEL/OBJECT NAME
var queryName = filter_element.attr('data-owner');
//GET THE IDs //this is either an array of all selected IDs or a single id which is used in the else statement
var queryId = filter_element.attr('value');
var queryIds = $('#'+filter_id).val();
var modelCheckIndex = requestString.toLowerCase().indexOf(queryName.toLowerCase());
//build a request string
if (modelCheckIndex < 0) {
console.info('ADD MODEL TO QUERY STRING');
requestString = requestString + "&" + (queryName.toLowerCase() + "[" + queryIds + "]");
console.log(requestString);
}
else{
console.info('UPDATE MODEL ON QUERY STRING');
var position = requestString.toLowerCase().indexOf(queryName.toLowerCase());
//requestString = requestString.substr(modelCheckIndex -1, requestString.length -1) + "," + queryId + "]";
requestString = requestString.slice(modelCheckIndex.indexOf("]"), modelCheckIndex) + "," + queryId;
console.log(requestString);
}
//MAKE THE API CALL USING CREATED QUERY STRING
}
如果有人有任何示例或演示,我也会非常感激。 这是一个演示,我正在尝试让它工作。
sources[1,2]&
是正确的吗?还是sources=[1,2]&
可能是正确的? - Nina Scholz