2011-07-15 156 views
0

在我的應用程序中,我們在頁面中使用prototype1.4.2。在asp.net webservice中返回json

而我們需要的樹狀視圖支持延遲加載(做一個Ajax請求,並從服務器到節點添加數據),然後我發現

TafelTree

它是基於內置原型。

而且還有一個功能:

onopenpopulate: 

它將加載從根據由用戶提供的簡稱「OpenLink」服務器的數據。

分支打開後調用。當它打開時,它將在頁面openlink上發起一個Ajax 請求,並將Ajax響應發送給用戶 函數。它必須返回一個JSON字符串,表示一個或更多TafelTreeBranch的數組。覆蓋TafelTree的setOnOpenPopulate()

但它需要服務器返回純json數據格式。

而且我已經創建了一個Web服務是這樣的:

[WebService(Namespace = "http://microsoft.com/webservices/"; 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[ScriptService] 
public class UtilService: WebService { 
    [WebMethod] 
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
    public string loadData(id) { 
     //some logic according the id 
     return "{id:0,name:'xx'}"; 
    } 
} 

但是當我調用該服務的使用:

http://xxx/UtilService/loadData?id=0 

我總是得到的XML格式。

通過谷歌,似乎我必須設置「內容類型」時,使Ajax請求。

但是,就我而言,ajax是由「TafelTree」發送的,我無法添加額外的參數。

有什麼想法?或者使用另一個基於原型的樹?

回答

1

你可以使用jQuery來做一個Ajax調用。

$.ajax({ 
     type: "POST", 
     contentType: "application/json; charset=utf-8", 
     url: "webServiceUrl/MethodName", 
     data: "{Id: '" + id + "'}", 
     dataType: "json", 
     success: loadSucceeded, 
     error: loadFailed, 
     async: true 
    }); 

function loadSucceeded(result, status) 
{ 
    var data = result.d; 
} 

function loadFailed(result, status) 
{ 
} 

請注意,它不一定要返回一個字符串,您可以返回一個對象列表。

[WebService(Namespace = "http://microsoft.com/webservices/"; 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[ScriptService] 
public class UtilService: WebService 
{ 
    [WebMethod] 
    public List<string> loadData(id) { 
     //some logic according the id 
     return new List<string>(){"data"}; 
    } 
} 
+0

我們在我們的應用程序中使用原型,似乎它是不是一個好主意,它們可能會導致相互衝突 – hguser