2013-09-18 9 views
1

Я уже разместил это на gitub typeahead, но я подумал, что, возможно, могу попросить здесь и найти ответ.typeahead.js remote beforesend post data issue

Я пытаюсь использовать удаленный запрос как наш источник данных для typeahead. Для этого я хотел бы создать POST и поместить мои параметры запроса в полезную нагрузку. Когда я устанавливаю параметр settings.type в POST в функции beforeSend, он работает, но когда я устанавливаю параметры settings.data, я не вижу данные, заданные в моих отладчиках, а затем в моем примере я использую простой сервис http, который возвращает ваш полезная нагрузка, и это также проверяет, что данные не отправляются. Под typeahead.js используется jQuery 1.9.1 и, в частности, с использованием его ajax beforeSend. Насколько я могу судить о jQuery ajax api, я устанавливаю соответствующие значения в функции typeahead beforeSend.

Вот мой код и работает в jsfiddle http://jsfiddle.net/75mCa/2/

$('.autocomplete-es .typeahead').typeahead({ 
    name: 'es-tags', 
    remote: { 
     url: 'http://httpbin.org/post', 
     beforeSend: function (jqXhr, settings) { 

      console.log('type is initially : ' + settings.type); 
      console.log('data is initially : ' + settings.data); 

      settings.type = 'POST'; 
      settings.data = { fields: ['tags.tag'], query: { prefix: { tag: 'emp' } } } 
      //settings.contentType = 'application/json; charset=utf-8'; 

      console.log('type is now : ' + settings.type); 
      console.log('data is now : ' + settings.data); 

      //settings.processData = false; 
      //settings.traditional = true; 

      return true; 
     }, 
     filter: function (data) { 
      console.log(data.data); 
      console.log(data.data.fields[0]); 
      //do actual processing...for now just looking for this not to throw an error 
     // return data.hits.hits[0].fields.tags.tag; 
     } 
    } 
}); 

Спасибо за любую помощь, G

+0

Возможно ли, что после создания 'jqXhr' не может измениться с' GET' на 'POST'? Если это так, почему бы просто не передать запрос в запрос «GET» и использовать «replace» для создания своего URL-адреса? –

+0

@NitzanShaked, запрос отправляется как POST, так что это не так. Хотя, возможно, это случай, когда полезная нагрузка не может быть изменена? И снова из примеров, которые я видел, должно быть. Также проверка моих изменений с помощью .ajaxSend(), похоже, подтверждает, что все настроено так, как я надеялся. Таким образом, между этой точкой и когда вызов построен и выполняется, я теряю полезную нагрузку. О, и, к сожалению, GET с параметрами url недостаточен для моего использования. –

+0

Я думаю, что это именно так: вы можете изменить GET на POST, но вы не можете изменить данные. По крайней мере, это не сработало для меня, и это не очевидно из документов, которые вы можете. Почему GET недостаточно хорош? –

ответ

3

У меня есть это точно такой же случай использования (интегрировать typehead.js с elasticsearch), и побежал в та же проблема. Проблема заканчивает тем, что строка кода JQuery, который проверяет, есть ли у вас данные формы POST является:

xhr.send((s.hasContent && s.data) || null); 

... и так просто идти вперед и установить s.hasContent=true в beforeSend и все работает.

+0

Это полностью сработало спасибо! Есть hasContent только недокументированное поле? Мне еще нужно было пройти через код jQuery, но в соответствии с [docs] (http://api.jquery.com/jQuery.ajax/#jQuery-ajax-settings) это не вариант. Похоже на неудачную проверку нашей ситуации. Еще раз спасибо. –

+0

Спрятал свою скрипку отсюда: http://jsfiddle.net/75mCa/2/ Добавлено только «settings.hasContent» даже не пишет ...: http://jsfiddle.net/4UzNe/ Любой рабочий пример ? – EGurelli

+0

Где вы установили s.hasContent для true? в файле jquery? – Sekai

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