加载失败错误

时间:2014-08-14 16:17:39

标签: jquery-select2

使用ajax在select2框中搜索某些内容时出现Loading failed错误。我的代码如下:

$("#drugSearch").select2({
    placeholder: "Search for a drug by drug id or name",
    minimumInputLength: 3,
    ajax: {
        url: "@Url.Action("SearchDrug", "Drug")",
        dataType: 'jsonp',
        quietMillis: 100,
        data: function (term, page) {
            return {
                query: term
            };
        },
        results: function (data, page) {
            debugger;
            return {
                results: data.drugs
            };
        }
    },
    formatResult: drugResult,
    formatSelection: drugSelection,
    escapeMarkup: function (m) { return m; }
});

function drugResult(drug) {
    debugger;
    return drug.Name + " (" + drug.DrugBankRef + ")";
}

function drugSelection(drug) {
    debugger;
    return drug.Name + " (" + drug.DrugBankRef + ")";
}

断点也没有达到上述debugger;

我的JSON返回为:

{ drugs: {[...]} }

它还有Name和DrugBankRef属性,我确认在搜索后从URL返回有效的JSON。

我在这里做错了什么?您需要跟踪问题的其他任何事情吗?

2 个答案:

答案 0 :(得分:5)

我使用JSONP代替JSON,将数据类型更改为JSON解决了问题。

答案 1 :(得分:3)

这不是错误。 JSON和JSONP之间存在真正的区别。在JSONP中,您的JS将发送一个名为callback的补充参数,该参数包含已删除的封闭函数名称。

Select2支持两种模式:

  • JSON,期望{ drugs: {[...]} }为数据

  • JSONP,提供callbackName并期望callbackName({ drugs: {[...]} });作为数据

两者都有效,并且是正确的,不同的,处理方式。

随时阅读http://en.wikipedia.org/wiki/JSONP