Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

select2 ajax won't display json data returned

Here is what the json string looks like that gets returned from my coldfusion page: [{"client":"Asante","id":12},{"client":"City of Lancaster","id":14},{"client":"Massey Energy","id":35},{"client":"Northeast Utilities","id":68},{"client":"Washtenaw","id":50}]. Firebug claims everything is working perfectly but none of the data shows up in the select2 plugin.

Does anyone know what the problem might be? Should it be returning column names or something?

select2 call:

$(".select").select2({
    allowClear: true,
    blurOnChange: true,
    openOnEnter: false,
    ajax: {
        url: "/surveymanagement/admin/client.cfc",
        dataType: 'json',
        data: function (term, page) {
            return {
                method: "GetClientsByName",
                name: term
            };
        },
        results: function (data, page) {
            return { results: data };
        }
    }
});
like image 286
Jake Zeitz Avatar asked Mar 01 '13 14:03

Jake Zeitz


2 Answers

Your data must of format [{"text":"Asante","id":12}, ...] else you need to pass {results: data, text: 'client'}

like image 76
Arun P Johny Avatar answered Oct 14 '22 03:10

Arun P Johny


If your json string needs to use something other than "text": "something" then here's the added stuff needed: use formatResults to get the data to show up. Here's the fixed version:

$(".select").select2({
    allowClear: true,
    blurOnChange: true,
    openOnEnter: false,
    ajax: {
        url: "/surveymanagement/admin/client.cfc",
        dataType: 'json',
        data: function (term, page) {
            return {
                method: "GetClientsByName",
                name: term
            };
        },
        results: function (data, page) {
            return { results: data };
        }
    },
    formatResult: function (data) {
        return "<div class='select2-user-result'>" + data.client + "</div>";
    },
    formatSelection: function (data) {
        return data.client;
    }
});

Otherwise Arun is right that you just need to use the format [{"id":1,"text":"client"}]

like image 34
Jake Zeitz Avatar answered Oct 14 '22 04:10

Jake Zeitz