联系API时出现错误的URL编码

时间:2015-11-24 13:36:15

标签: javascript json url encoding

我正在开展一个学校项目,我正试图为纽约时报的文章搜索API创建搜索功能。 我的搜索过滤器之一有问题,因为当我运行该函数时我得到错误400因为某些原因它无法读取url编码。有趣的是,如果我用=和%26替换所有%3D&#;在我自己的URL中它可以工作,我可以看到API正确响应。

if($('#date1').is(':checked')) {date="day_of_week&begin_date=18500101&end_date=19000101";}
if($('#date2').is(':checked')) {date="day_of_week&begin_date=19000101&end_date=19500101";}
if($('#date3').is(':checked')) {date="day_of_week&begin_date=19500101&end_date=20000101";}
if($('#date4').is(':checked')) {date="day_of_week&begin_date=20000101&end_date=20150101";}

$.getJSON('http://api.nytimes.com/svc/search/v2/articlesearch.json',
{'api-key': 'XXXXXXXXXXXXXXXXXXXXXXX',
'fq': 'headline:("'+sogestreng.toLowerCase()+'")'+" AND "+finalSections,
'facet_field': date},

此代码返回" http://api.nytimes.com/svc/search/v2/articlesearch.json?api-key=XXXXXXXXXXXXXXXXXXXXXXX&fq=headline%3A(%22dubai%22)+AND+section_name.contains%3A(%22Sports%2C+%22)&facet_field=day_of_week%26begin_date%3D20000101%26end_date%3D20150101"

如果我手动替换url编码的最后一部分并在浏览器中打开它,我会得到我正在寻找的结果。

我这样做是通过改变:

"&安培; facet_field = DAY_OF_WEEK%26begin_date%3D20000101%26end_date%3D20150101"

"&安培; facet_field = DAY_OF_WEEK&安培; BEGIN_DATE = 20000101&安培; END_DATE = 20150101"

另外澄清一下," fq"标准工作得非常好,它只是facet_field。

这怎么可能?它有什么问题吗?

1 个答案:

答案 0 :(得分:0)

您将多个字段的描述推送到一个字段的值中。要获得所需的结果,请尝试:

var begin_date, end_date;

if($('#date1').is(':checked')) {      
  begin_date = 18500101;
  end_date = 19000101;
}
else if($('#date2').is(':checked')) {
  // etc.
}


$.getJSON('http://api.nytimes.com/svc/search/v2/articlesearch.json',
  {
    'api-key': 'XXXXXXXXXXXXXXXXXXXXXXX',
    'fq': 'headline:("'+sogestreng.toLowerCase()+'")'+" AND "+finalSections,
    'facet_field': 'day_of_week',
    'begin_date': begin_date,
    'end_date': end_date
  },
// ...