Select2 ajax正确调用web服务,但之后什么也不做

Dre*_*hie 5 jquery json jquery-select2

我正在使用以下 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');
    },
  },
});
Run Code Online (Sandbox Code Playgroud)

我调用的方法如下:

<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
Run Code Online (Sandbox Code Playgroud)

我也有<ScriptService()>周围的班级。enableSession 之所以存在,是因为最终我将在需要它的服务中运行大量逻辑,但现在我只是尝试使用 JSON 返回一个简单的字符串。

我在网络服务中设置了一个断点,并且我知道它正在被调用。我知道它正在返回 JSON。我还知道 select2 期望 JSON 返回中的“id”和“text”

我的问题如下:输入 3 个字符后,数据函数调用(我在其中添加了警报),命中了 Web 服务断点,但随后没有任何结果、成功或错误事件触发。select2 只是旋转,什么也没有发生。控制台中没有输入 javascript 错误,我什至不知道在哪里查找有关 ajax 为何不处理服务返回值的信息。

任何人都可以指出我至少应该在哪里查看为什么这不起作用的方向吗?

Dre*_*hie 4

因此,在收到查看网络日志的提示后,我自己修复了这个问题。服务正确返回,但返回的是 XML,而不是 JSON。我必须进行两次修改,一切正常。

我的工作阿贾克斯:

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};
  },
},
Run Code Online (Sandbox Code Playgroud)

重要的变化是类型,将 contentType 放入 params 包装器中,并对数据进行 JSON.stringify。我将改变已经过去的事情以及过去的方式,但现在至少事情正在沟通。希望这对正在寻找类似解决方案的其他人有所帮助。