2013-07-23 67 views
4

我設置了一個select2與以下JavaScript選擇二Ajax是正確調用web服務,但後來

$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返回一個簡單的字符串。

我把一個斷點放在web服務中,我知道它正在被調用。我知道它正在返回JSON。我也知道select2期望JSON中的「id」和「text」返回

我的問題如下:輸入3個字符後,數據函數調用(我在其中放入一個警報),web服務斷點被擊中,但沒有任何結果,成功或錯誤事件隨後發生。 select2只是旋轉而什麼也沒有發生。在控制檯中沒有輸入任何javascript錯誤,而且即使在何處查找有關ajax未處理服務返回值的信息,我也不知所措。

任何人都可以指出我的方向至少在哪裏看看爲什麼這不起作用?

回答

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的數據。我要改變傳遞的內容以及傳遞的內容,但事情至少在溝通。希望這有助於任何正在尋找類似解決方案的人。