我正在使用以下JavaScript设置select2
$j("#" + name).select2({
placeholder: "",
width:"300px",
minimumInputLength: 3,
ajax: {
url: "/MyService.asmx/ServiceMethod",
dataType: 'json',
data: function (term) {
return {
q: term // search term
};
},
results: function (data) {
alert('results');
return {results: data};
},
success: function() {
alert('success');
},
error: function () {
alert('error');
},
},
});
我正在调用的方法如下:
<WebMethod(enableSession:=True)>
<ScriptMethod(ResponseFormat:=ResponseFormat.Json)>
Public Function ServiceMethod(q as String) As String
Dim temp As String = "[{'id':'35','text':'Drew'}]"
Return temp
End Function
我在课堂上也有<ScriptService()>
。 enableSession就在那里,因为最终我将在需要它的服务中运行很多逻辑,但是现在我只是想用JSON返回一个简单的字符串。
我在网络服务中放了一个断点,我知道它正在调用。我知道它正在返回JSON。我也知道select2在JSON返回中需要“id”和“text”
我的问题如下:输入3个字符后,数据函数调用(我在其中放入警报),Web服务断点被点击,但结果,成功或错误事件都没有发生。 select2只是旋转而没有任何事情发生。在控制台中没有输入任何javascript错误,即使在哪里查找有关ajax未处理服务返回值的信息的地方,我也不知所措。
任何人都可以指出我至少在哪里看看为什么这不起作用?
答案 0 :(得分:4)
所以我在获得提示查看网络日志后自行解决了这个问题。该服务正确返回,但它返回的是XML,而不是JSON。我不得不进行2次修改,一切正常。
我的工作ajax:
ajax: {
url: "/MyService.asmx/ServiceMethod",
type: 'POST',
params: {
contentType: 'application/json; charset=utf-8'
},
dataType: 'json',
data: function (term, page) {
return JSON.stringify({ q: term, page_limit: 10 });
},
results: function (data) {
return {results: data};
},
},
重要的变化是类型,将contentType放在params包装器中,JSON.stringify-ing数据。我要改变传递的内容以及它的传递方式,但事情现在至少在沟通。希望这能帮助其他寻求类似解决方案的人。