2013-06-16 7 views
7

Ich habe Probleme, die Ergebnisse in der Select2 mit AJAX angezeigt werden. Hier ist mein Code:Select2: Ergebnisse nicht mit 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; 
} 

der JavaScript-Konsole verwenden, ich sehe die Anforderung die erwartete JSON zurückgibt: Javascript Console

[

{ "text": "Foo-Produkt", "img": "#", "precio_costo": 45 "existencias": 0, "id": 2}

]

Ich glaube, die Ergebnisse: function(data, page) { ... } wird nicht aufgerufen, da ich eine Warnung dort gesetzt und nichts passiert ist.

Es hängt nur dort warten auf Ergebnisse: Hangs waiting for results

Antwort

11

Ich denke, Sie Rückkehr json statt JSONP,

so versuchen, die Linie dataType: 'jsonp'-dataType: 'json' ändern, oder sogar die ganze Zeile zu entfernen.

Ich habe das gleiche schon einmal erlebt. json Ergebnis wird durch diese Kriterien ausgesiebt, selbst wenn die erwartete JSON tatsächlich zurückgeführt wird, sehr wahrscheinlich, weil json und JSONP als zwei verschiedene Formate gesehen

PS: Dies ist mehr wie ein Kommentar, aber da kann ich‘ t Kommentar zu Ihrer Frage, bitte tragen Sie mit mir

+0

Danke. Du hast mir heute das Leben gerettet .... – Haritha

+0

Gern geschehen;) –

0

Ich glaube, Sie keinen Wert Form Ajax-Aufruf zurückkehren kann, da die Ajax-Aufruf asynchronous ist.. Behandle lieber die Ergebnisse dort selbst. oder verwenden Sie callback functions wie im nachstehenden Link angegeben.

siehe jQuery: Return data after ajax call success

+1

Dies ist kein einfacher Ajax Anruf obwohl, es ist ein Plugin. Oder wissen Sie, wie genau die Callbacks 'data' und' results' funktionieren? –

+0

Ja, in der Dokumentation heißt es: "Dieses Objekt dient als Abkürzung für das manuelle Schreiben einer Funktion, die AJAX-Anfragen ausführt. Die integrierte Funktion unterstützt erweiterte Funktionen wie das Drosseln und das Löschen von Out-of-Order-Antworten." - http://ivaynberg.github.io/select2/ – blaze

+0

@Felix Kling ya Ich weiß wie Callbacks funktionieren, wie zB einen Funktionszeiger übergeben, so dass die Funktion vom Zeiger aufgerufen wird. Außerdem weiß ich, dass der Ajax-Aufruf asynchron ist und keinen Wert zurückgeben kann. Und ich dachte, das OP hinkt da, da Ajax-Konzept überall gleich ist. Daher gab es einen Vorschlag. Also, als Antwort habe ich "Ich denke". Zu zugeben - ich kenne das genaue Szenario nicht, in dem er arbeitet. Fehle ich irgendwo in der Antwort? –