2012-07-18 50 views
1

服務器端:getJSON與ServiceStack?

[RestService("/x")] 
public class XFilter 
{ 
    public long[] CountryIds { get; set; } 
} 

public class XService : RestServiceBase<XFilter> 
{ 
    private const int PageCount = 20; 

    public override object OnGet(XFilter request) 
    { 
     Debugger.Break(); // request is always default at this point !! 
     return a; 
    } 
} 

客戶端:

<script type="text/javascript"> 

var requestData= "{CountryIds:[1,2]}"; 
$.getJSON("/api/x", requestData, function (b) { 

}); 

它必須是那麼容易的,但在服務器端使用這種方法我不能讓XFilter。

回答

0
var requestData= "{CountryIds:[1,2]}"; 

必須

var requestData= {CountryIds:[1,2]}; 

但getJSON仍然存在問題。它不適用於數組?

Send list/array as parameter with jQuery getJson是因爲它的解決方案:)

補充一點:

$.ajaxSetup({ 
    traditional: true 
}); 
1

這不是有效的JSON:

var requestData= "{CountryIds:[1,2]}"; 

所有字符串必須用引號引起,例如:

var requestData= '{"CountryIds":[1,2]}'; 
var requestData = JSON.stringify({CountryIds:[1,2]}); //same as above 

這將是您通過$.ajax POST發送的內容,您可能會考慮這麼做,因爲在GET請求中沒有處理複雜類型的約定,因爲它必須將其序列化爲queryString。

如果你想發送一個複雜類型作爲queryString,你需要自己構造URL。 ServiceStack使用它的JSV Format來處理GET請求中的複雜類型(這只是帶有CSV轉義的JSON,也就是沒有引號的JSON)。

所以你的要求,現在應該是:

var requestData = "[1,2]"; 
$.getJSON("/api/x?CountryIds=" + requestData, function (b) { 
}); 

重新蓋:如果你想送JSON,你需要通過Ajax POST這樣做。

+0

不,我已添加回復。請檢查一下。 IT必須在javascript中不使用引號。 – ozz 2012-07-18 16:07:40