2012-05-10 5 views
1

Я использую Solr's JSON output for AJAX example в качестве основы для моего проекта. Однако я изменил ситуацию, добавив раскрывающееся меню в форму и добавив огранку к параметрам.Правильный ответ на запрос Solr & AJAX

Params:

function getstandardargs() { 
    var params = [ 
     'wt=json' 
     ,'facet=true' 
     ,'facet.field=brand1' 
     ,'facet.field=brand2' 
     ,'facet.field=brand3' 
     ,'facet.field=brand4' 
     ,'facet.limit=2' 
     ]; 

раскрывающегося меню:

<form name="f1" onsubmit='xmlhttpPost("/solr/select"); return false;'> 
    <p>query: <input name="query" type="text"> 
    <select id="Entity"> 
    <option value="brand1">Universal</option> 
    <option value="brand2">Paramount</option> 
    <option value="brand3">Fox</option> 
    <option value="brand4">Sony</option> 
</select> 
    <input value="Go" type="submit"></p> 

Я пытаюсь добавить выпадающее значение для моего фасета результата запроса, как, например:

var rsp = eval("("+str+")"); 
var c=document.getElementById("Entity"); 
cat=c.options[c.selectedIndex].value; 
var output=rsp.facet_counts.facet_fields; 
html += "Entity: " + output+'.'+cat; 

Мой ответ фасет отправляется обратно: Сущность: [объект объекта] .Универсальный. Как правильно добавить раскрывающееся значение в запрос ответа, чтобы Solr мог фактически вернуть правильные значения фасета? Большое спасибо.

ответ

2

вы, несомненно, уменьшить сложность этой задачи, используя библиотеку для вашего запроса AJAX, потому что:

  • вы можете легко сделать манипуляции DOM, необходимые, чтобы превратить их в выбрать опции
  • вы можете отправить запрос произвольно с расчетом, чтобы получить обратно реальный объект JSon
  • вы можете избежать использования eval

И поскольку вы сказали, что ваш ответ «Entity: [object Object] .Universal», можете ли вы попытаться использовать console.log(output);, чтобы сообщить нам, что возвращается в объекте, официально? есть вероятность того, что с помощью конкатенации строк с объектом, вы Мессинг выходного объекта

, если это на самом деле объект, вы можете получить доступ к нему итеративно, как это:

for(var x in rsp.facet_counts.facet_fields) { 
    //rsp.facet_counts.facet_fields[x] 
} 
+0

Спасибо за ответ. console.log показывает окно <Объекты правильно в firebug: brand1 ["Eve2", 10, "RHCP", 6] brand2 \t ["Black_Keys", 6, White_Stripe, 5] brand3 ["SoaD", 5, " BoB ", 3] brand4 \t [" Двери ", 3," Cage_Elephant ", 2]. Если я статически вставляю какие-либо из 4-х брендов (rsp.facet_counts.facet_fields.brand1), я получаю правильные результаты грантов от Solr. Тем не менее, я не могу понять, почему добавление brand1 динамически из раскрывающегося списка сущностей в виде var с кашлями «+» на мне ... – Chris

+0

вы не делаете это динамически, вы неправильно вводите тип. правильный способ сделать эти элементы - создать цикл for, где для каждого члена массива вы ссылаетесь на свой объект rsp.facet_counts.facet_fields. for (var x in rsp.facet_counts.facet_fields) {// что-то делать с rsp.facet_counts.facet_fields [x]} – Kristian

+0

yup ... это сделало это, спасибо за урок – Chris

Смежные вопросы