2013-06-16 9 views
7

Mam problemy z wyświetlaniem wyników w Select2 przy użyciu AJAX. Oto mój kod:Wybierz2: Wyniki nie są wyświetlane przy użyciu 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; 
} 

Używanie konsoli JavaScript, widzę wniosek zwraca oczekiwaną JSON: Javascript Console

[

{ "text": "Foo produktu", "IMG": "#", "precio_costo": 45 "existencias" 0 "id": 2}

]

Uważam, że wyniki: function(data, page) { ... } nie jest wywoływany, ponieważ wprowadziłem alert i nic się nie stało.

prostu wisi on tam czeka na wyniki: Hangs waiting for results

Odpowiedz

11

Chyba wracasz json zamiast jsonp,

więc spróbuj zmienić linię dataType: 'jsonp' do dataType: 'json', lub nawet usunięcie całej linii.

Doświadczyłem już tego samego. wynik json przesiewa się przez tych kryteriów, nawet jeśli oczekiwany JSON jest rzeczywiście wrócił, bardzo prawdopodobnie dlatego json i jsonp są postrzegane jako dwóch różnych formatach

PS: To jest bardziej jak komentarzu, ale skoro mogę” t skomentuj swoje pytanie, proszę znieść mnie

+0

Thanx. Uratowałeś mi dziś życie ... – Haritha

+0

Nie ma za co;) –

0

myślę, że nie może zwrócić wartość wezwanie forma ajax, ponieważ wywołanie ajax jest asynchronous.. Raczej zajmuj się wynikami tam samymi. lub użyj callback functions, jak podano w linku poniżej.

zobaczyć jQuery: Return data after ajax call success

+1

To nie jest proste połączenie Ajax, to wtyczka. Czy wiesz, jak dokładnie działają callbacki 'data' i' results'? –

+0

Tak, z dokumentów mówi: "Ten obiekt działa jako skrót do ręcznego zapisu funkcji, która wykonuje żądania ajax. Wbudowana funkcja obsługuje bardziej zaawansowane funkcje, takie jak ograniczanie i odrzucanie odpowiedzi". - http://ivaynberg.github.io/select2/ – blaze

+0

@Felix Kling ya Wiem, jak działają wywołania zwrotne, takie jak przekazywanie wskaźnika funkcji, aby funkcja była wywoływana przez wskaźnik. Ponadto, wiem, że wywołanie ajax jest asynchroniczne i nie może zwrócić wartości. I myślałem, że OP jest tam opóźniony, ponieważ koncepcja ajax jest wszędzie taka sama. W związku z tym dał sugestię. Tak więc w odpowiedzi umieściłem "myślę". Przyznać - nie znam dokładnego scenariusza, w którym on pracuje. Czy jestem w błędzie nigdzie w odpowiedzi? –