Javascript 将查询字符串设置为ajax数据

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++) {

此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++)
    {
        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) {

  }
});