2010-02-15 82 views
2

我有以下的JSON類我打算用它來對我的數據庫異步執行管理電話:如何通過JSON將可選參數傳遞給WebMethod?

<script type="text/javascript"> 

    var CalendarManager = { 

     defaultOptions: { 
      staffcode: 0,  // required 
      date: 0,   // required 
      activityCode: 0, // required 
      clientCode: null, // optional 
      contactCode: null, // optional 
      destination: '', // optional/doesn't matter 
      travelCode: null, // optional 
      miles: null,  // optional 
      overnight: false, // optional 
      notes: ''   // optional/doesn't matter 
     }, 

     createEvent: function(options) { 
      var combinedOptions = $.extend(true, {}, this.defaultOptions, options); 
      $.ajax({ 
       type: "POST", 
       url: 'calendar/calendar-manager-ajax.aspx/CreateEvent', 
       data: combinedOptions, 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       success: function(data, textStatus, XMLHttpRequest) { 
        alert(textStatus + ", " + data); 
       }, 
       error: function(data, textStatus, XMLHttpRequest) { 
        alert(textStatus + ", " + data); 
       } 
      }); 
     } 
    }; 
</script> 

然後我用它在我的網頁像這樣:

<script type="text/javascript"> 
    CalendarManager.createEvent(); // random test 
</script> 

目前,我試圖讓這個AJAX調用火以下方法:

[WebMethod()] 
public static string CreateEvent(int staffcode, int date, 
    int activitycode, int? clientcode, 
    int? contactCode, string destination, 
    int? travelcode, int? miles, 
    bool overnight, string notes) 
{ 
    return null; 
} 

不幸的是,該方法CreateEvent沒有得到CAL領導,我得到一個AJAX錯誤(設置一個斷點不停止執行):如果我改變data: combinedOptionsdata: "{}"

錯誤,[XmlHttpRequest對象]

,並添加另一種方法來我的ASPX (如下)代碼工作成功:

[WebMethod()] 
public static string CreateEvent() 
{ 
    return null; 
} 

基本上,我的問題是:我該如何指定可選參數的WebMethod提供JSON數據時?

我知道我可以將參數降低到所需的值,然後使用HttpContext.Request.Params來讀取可選參數的值,但我會想我在這裏嘗試的方式應該已經工作了。

EDIT

該錯誤的XMLHttpRequest.responseText值爲:

無效JSON原始:staffcode。

這是扔我更加關問題:(的氣味

回答

1

固定它。有。爲2個問題

首先,我的所有參數的情況下,是不正確的(注意「activityCode」而不是「activitycode」)

而且我現在也用這個。

data: JSON.stringify(combinedOptions) 

確實是愚蠢的錯誤,但你有它。

2

有沒有這樣的事情「可選」的參數。傳遞一個默認爲未使用PARAMS。

+0

這就是我想要做的 - 在默認情況下使用'null',所以'int?'值有希望包含'null'。所有參數都已經被指定,你可以看到。 – Codesleuth 2010-02-15 16:30:15

+0

看起來像你已經在你需要的地方。真的沒有辦法做你的建議。我知道,我已經嘗試過了。你不能有可選的參數,如果你沒有參數構造端點,希望從上下文中讀取它們,你將會得到一個無法識別的參數的異常。 IIRC。 – 2010-02-15 16:57:49

相關問題