使用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。
我在这里做错了什么?您需要跟踪问题的其他任何事情吗?
答案 0 :(得分:5)
我使用JSONP
代替JSON
,将数据类型更改为JSON
解决了问题。
答案 1 :(得分:3)
这不是错误。 JSON和JSONP之间存在真正的区别。在JSONP中,您的JS将发送一个名为callback的补充参数,该参数包含已删除的封闭函数名称。
Select2支持两种模式:
JSON,期望{ drugs: {[...]} }
为数据
JSONP,提供callbackName并期望callbackName({ drugs: {[...]} });
作为数据
两者都有效,并且是正确的,不同的,处理方式。