Javascript 将查询字符串设置为ajax数据
此URL: myurl.com/index?b=5&m=2 我通过一个函数得到了查询字符串,结果是:Javascript 将查询字符串设置为ajax数据,javascript,jquery,ajax,Javascript,Jquery,Ajax,此URL: myurl.com/index?b=5&m=2 我通过一个函数得到了查询字符串,结果是: function getQuery(){ var vars = [], hash; var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&'); for(var i = 0; i < hashes.length; i++) {
function getQuery(){
var vars = [], hash;
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
for(var i = 0; i < hashes.length; i++)
{
hash = hashes[i].split('=');
vars.push(hash[0] + '=' + hash[1]);
//vars[hash[0]] = hash[1];
}
return vars;
}
返回:
[
0: "b=5"
1: "m=2"
];
现在我想将这些添加到ajax数据中:
var queries = query.join('&');
$.ajax({
type: "GET",
data: {
limit: limit,
provId: provId,
catid: catid
// add query strings after this
},
dataType: 'html',
url: '/api/fetch.php?getBrowse&' + queries,
success: function(data) {
}
});
AJAX URL应如下所示:
api/fetch.php?getBrowse&b=5&m=2&limit=2&provId=1&catid=59
正如您所看到的,我在Ajax中的URL末尾附加了查询,它仅在设置这些查询时才起作用,但如果没有设置,它将返回错误值或空值
我想要的是,添加这些查询,比如数据结构
像这样:
data: {
b: bval,
m: mbal,
limit: limit,
provId: provId,
catid: catid
},
但是这是手动设置的,我不知道设置了哪些查询,b
,或者m
等等。因此,我正在寻找一种方法来动态添加每个查询,如果设置为append到AJAX数据,如果设置为append到AJAX数据,则不进行append。有什么想法吗?试试这个:
var returnData = [
"b=5",
"m=2"
];
var ajaxData = {};
for (var i = 0; i < returnData.length; i++) {
// Split each array element into a pair, = delimited
var pair = returnData[i].split("=");
// Add to object
ajaxData[pair[0]] = pair[1];
}
console.log(ajaxData);
var returnData=[
“b=5”,
“m=2”
];
var ajaxData={};
对于(var i=0;i
在将数据对象添加到查询之前,您可能应该检查数据对象中是否存在每个值:
var query = "?";
var firstKey = true;
for (var key in data) {
if (data[key]) {
if (!firstKey) {
query += "&";
}
else {
firstKey=false
}
query += data[key];
}
}
有关更多详细信息,请使用此“请参见plunker”
var query=getQuery();
URL=“api/fetch.php?”;
var=”;
查询=查询[0];
for(var i=1;i
我将使用不同的getQuery
将查询参数作为键/值对象而不是数组返回
function getQuery(){
var params = {};
window.location.search.slice(1).split('&').map(function(pair){
var [key, value]= pair.split('='); // using destructuring assignment
params[key] = value;
})
return params;
}
现在可以使用Object.assign
将两个对象合并为一个
var urlParameters = getQuery(),
initialOptions = {
limit: limit,
provId: provId,
catid: catid
},
combinedData = Object.assign({}, initialOptions, urlParameters);
$.ajax({
type: "GET",
data: combinedData ,
dataType: 'html',
url: '/api/fetch.php?getBrowse',
success: function(data) {
}
});
请检查更新的问题。我理解你的答案,所以请看getQuery函数,我可以在这个函数中执行你的逻辑吗?我可以检查getQuery函数中的每个值吗?如果您可以使用ES6,请在更新的问题上查看它,然后类似的方法应该可以工作:
key=hashes.find(h=>h[0]==“m”)代码>。key
的值将是null
如果m
未设置,或者将是它的值。
function getQuery(){
var params = {};
window.location.search.slice(1).split('&').map(function(pair){
var [key, value]= pair.split('='); // using destructuring assignment
params[key] = value;
})
return params;
}
var urlParameters = getQuery(),
initialOptions = {
limit: limit,
provId: provId,
catid: catid
},
combinedData = Object.assign({}, initialOptions, urlParameters);
$.ajax({
type: "GET",
data: combinedData ,
dataType: 'html',
url: '/api/fetch.php?getBrowse',
success: function(data) {
}
});