Передача нескольких значений одного и того же параметра в .getJSON()

#javascript #jquery #json #api #youtube

#javascript #jquery #json #API #YouTube

Вопрос:

Я пытаюсь следовать:

 <script>
  var topic_id = '/m/04136kj';
  var service_url = 'https://www.googleapis.com/freebase/v1/topic';
  var params = {
                filter: "/common/topic/article",
                filter:"/common/topic/notable_for",
                filter: "/common/topic/notable_types",
                filter: "/type/object/type"
               };

  $.getJSON(service_url   topic_id   '?callback=?', params, function(topic) {
    //do something with response.
  });
</script>
 

Если вы заметили, я должен передать 4 значения для filter . Но конечный URL-адрес, который я получил от FIDDLER, содержит только последнее значение ( /type/object/type ) Я пробовал только с одним параметром, и он отлично работает (любой параметр), но не с несколькими значениями. Как я могу сформировать правильный параметр?

Редактировать:

Передача массива, подобного приведенному ниже, в первом ответе неправильно кодирует URL. Он добавляется [] после filter , т.е. он передается filter[]= в URL, а не filter=

 var params = {
           filter: ["/common/topic/article", "/common/topic/notable_for",
                      "/common/topic/notable_types", "/type/object/type"]
           };
 

Ответ №1:

создайте объект фильтра в виде массива

 var topic_id = '/m/04136kj';
var service_url = 'https://www.googleapis.com/freebase/v1/topic';
var params = {
    filter: ["/common/topic/article", "/common/topic/notable_for", "/common/topic/notable_types", "/type/object/type"]
};
//used to remove the the suffix [] in the array param
$.ajaxSetup({ traditional: true });
$.getJSON(service_url   topic_id   '?callback=?', params, function (topic) {
    //do something with response.
});
 

Комментарии:

1. Спасибо. Это работает, и я понял логику. Это действительно глупо с моей стороны: D

2. Один маленький вопрос. Url кодируется следующим образом: https://www.googleapis.com/freebase/v1/topic/m/04136kj?callback=jsonp1403174148707amp;filter[]=/common/topic/article я замечаю [] фильтр after. Вы знаете, почему?

3. Я подтвердил с помощью fiddler. Он передается [] с фильтром, и это вызывает неправильный ответ. Есть идеи?

4. Понижение, потому что это не ответ на вопрос из-за встроенного []

Ответ №2:

Объект param должен быть создан так, как если бы это был HTML <form> -объект, в виде серии пар имя / значение.

 var topic_id = '/m/04136kj';
var service_url = 'https://www.googleapis.com/freebase/v1/topic';
var filter = ["/common/topic/article", "/common/topic/notable_for",
    "/common/topic/notable_types", "/type/object/type"];
var params = filter.map(function(f) { return { name: "filter", value: f }; });

$.getJSON(service_url   topic_id   '?callback=?', params, function (topic) {
    //do something with response.
});