JSON.stringify和$ http请求

时间:2017-03-22 14:17:31

标签: javascript json

我有一个JS字符串,如下所示:

user_fav = "21,16";

这必须通过一个函数,它变成一个带有id键的JSON数组,如下所示:

{"id":21},{"id":16}

这会进入$ http请求:

return $http({
    method: 'GET',
    url: getUrl('products'),
    params: {
        pageSize: 2000,
        pageNumber: 1,
        "filter": { "q": { "$or": [{"id":21},{"id":16}] } }, // <-- HERE
        sort: []
    }
});

现在,如果我运行上面的$http请求,一切正常,但是如果我将String(user_fav)转换为该JSON并将其发送到$http请求,则会触发错误。这是我的转换器:

user_fav = "21,16";

var user_fav_to_array = "";
var splitFav = user_fav.split(",");

for (var i = 0; i < splitFav.length; i++) {
    user_fav_to_array += JSON.stringify({ id: parseInt(splitFav[i]) }) + ',';
}

var JSONFavs = user_fav_to_array.substring(0, user_fav_to_array.length - 1);

//Result: JSONFavs => {"id":21},{"id":16}

所以这给出了一个错误:

return $http({
    method: 'GET',
    url: getUrl('products'),
    params: {
        pageSize: 2000,
        pageNumber: 1,
        "filter": { "q": { "$or": [JSONFavs] } }, // <-- HERE
        sort: []
    }
});

Madame and messier错误是417 (Critical Exception),这来自Backand.com系统

2 个答案:

答案 0 :(得分:1)

看看下面的代码。你的代码实际上做的是将Json STRING分配给$或property。但真正需要的是分配项目数组(如预期的那样)。如果您有任何问题,请告诉我

user_fav = "21,16";
//Dont need this
//var user_fav_to_array = "";
// New Variable to save array items
var arrayData =[];
var splitFav = user_fav.split(",");

for (var i = 0; i < splitFav.length; i++) {
   // don't need this
  //user_fav_to_array += JSON.stringify({ id: parseInt(splitFav[i]) }) + ',';
  // Just create a simple javascript object with id and put it into array at i index 
  arrayData[i]={ id: parseInt(splitFav[i]) }; 
}

//var JSONFavs = user_fav_to_array.substring(0, user_fav_to_array.length - 1);

// Then in Http Request filter, it should be just like this "$or": arrayData 
"filter": { "q": { "$or": arrayData } }

答案 1 :(得分:0)

这可能需要处理你的变量 - var user_fav_to_array =“”;
您可能希望将其更改为以下var user_fav_to_array = [];

由于它有引号,因此可能导致变量以您不希望的方式运行。除非字符串在javascript中被视为数组。