2013-06-16 2 views
7

У меня возникли проблемы с отображением результатов в Select2 с использованием AJAX. Вот мой код:Select2: Результаты не показаны с использованием AJAX

$(document).ready(function() { 
    $("#producto").select2({ 
     placeholder: 'Select a product', 
     formatResult: productFormatResult, 
     formatSelection: productFormatSelection, 
     dropdownClass: 'bigdrop', 
     escapeMarkup: function(m) { return m; }, 
     minimumInputLength:3, 
     ajax: { 
      url: 'http://foo.foo/listar.json', 
      dataType: 'jsonp', 
      data: function(term, page) { 
       return { 
        q: term 
       }; 
      }, 
      results: function(data, page) { 
       return {results:data}; 
      } 
     } 
    }); 


function productFormatResult(product) { 
    var html = "<table class='product-resultado'><tr>"; 
    if(product.img != undefined) { 
     html += "<td class='product-image'><img src='"+product.img+"'/></td>"; 
    } 
    html += "<td class='product-info'>"; 
    html += product.text + "<br />"; 
    html += product.precio_costo + " CRC <br />"; 
    html += "Existencias: " + product.existencias; 
    html += "</td></tr></table>"; 
    return html; 
} 

function productFormatSelection(product) { 
    return product.text; 
} 

Использование Javascript консоли, я вижу, запрос возвращает ожидаемый JSON: Javascript Console

[

{ "текст": "Foo продукта", "IMG": "#", "precio_costo": 45, "existencias": 0, "идентификатор": 2}

]

Я считаю, что результаты: function(data, page) { ... } не называется, так как я поставил предупреждение там, и ничего не произошло.

Он просто висит в ожидании результатов: Hangs waiting for results

ответ

11

Я думаю, вы возвращения JSON вместо JSONP,

так попробуйте изменить линию dataType: 'jsonp' к dataType: 'json', или даже удаление всей линии.

Я испытал то же самое раньше. Результат JSON будет экранируются этим критериям, даже если ожидаемый JSON на самом деле вернулся, очень возможно, потому, что JSON и JSONP рассматриваются как два разных форматов

PS: Это больше похоже на комментарий, но так как я могу» т комментарий по вашему вопросу, пожалуйста, несите меня

+0

Thanx. Ты спас мою жизнь сегодня .... – Haritha

+0

Добро пожаловать;) –

0

Я думаю, что вы не можете вернуть значение формы Ajax вызова, поскольку вызов Ajax является asynchronous.. Скорее обрабатывайте результаты там сами. или используйте callback functions, как указано в приведенной ниже ссылке.

см jQuery: Return data after ajax call success

+1

Это не простой вызов Ajax, хотя это плагин. Или вы знаете, как работают обратные вызовы 'data' и' results'? –

+0

Да, из документов в нем говорится: «Этот объект выступает в качестве ярлыка для того, чтобы вручную написать функцию, которая выполняет запросы ajax. Встроенная функция поддерживает более сложные функции, такие как дросселирование и отбрасывание ответов вне порядка». - http://ivaynberg.github.io/select2/ – blaze

+0

@Felix Kling ya Я знаю, как работают обратные вызовы, такие как передача указателя функции, так что функция будет вызываться указателем. Кроме того, я знаю, что вызов ajax асинхронен, и он не может вернуть значение. И я думал, что ОП там отстает, так как концепция аякса везде одинакова, поэтому дала предложение. Итак, в ответ я поставил «я думаю». Допустить - я не знаю точного сценария, в котором он работает. Я ошибаюсь в любом месте? –