Select2 ajax正确调用webservice,但后来什么也没做

时间:2013-07-23 19:58:18

标签: json jquery 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');
    },
  },
});

我正在调用的方法如下:

<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未处理服务返回值的信息的地方,我也不知所措。

任何人都可以指出我至少在哪里看看为什么这不起作用?

1 个答案:

答案 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数据。我要改变传递的内容以及它的传递方式,但事情现在至少在沟通。希望这能帮助其他寻求类似解决方案的人。