2012-04-25 56 views
0

這讓我難住 - 我不知道問題出在哪裏!C#/ jQuery webservice調用給出了500錯誤

該調用總是返回500錯誤:

查詢:

$('body').on('click', '.day', function() { 
    // a suspect day has been clicked 
    if (confirm('Re-index documents received on this day?')) { 
     // re-index 
     var day = $(this).find('.day_number').text(); 
     var year = parseInt($('#hidYear').val()); 
     var month = parseInt($('#hidMonth').val()); 
     $.ajax({ 
      type: "POST", 
      url: "ajax.asmx/ReIndexDay", 
      data: JSON.stringify({ Month: month, Year: year, Day: day }), 
      contentType: "application/xml; charset=utf-8", 
      dataType: "xml", 
      success: function (data) { 
       var calendarHTML = $(data).find(':first').text(); 
       // update hidden fields and calendar 
       $('#hidYear').val(year); 
       $('#hidMonth').val(month); 
       $('#divContent').html(calendarHTML); 
      }, 
      error: function (msg) { 
       alert("Failed: " + msg.status + ": " + msg.statusText); 
      } 
     }); 
    } 
}); 

C#

[WebMethod(Description = "Re-index the day and return HTML of a calendar table for the month")] 
[ScriptMethod(ResponseFormat = ResponseFormat.Xml)] 
public string ReIndexDay(int Day, int Month, int Year) 
{ 
    Diagnostic.ReIndex(Day, Month, Year); 
    return GetIndexCalendarHTML(Month, Year); 
} 

我卡住了,因此所有的建議表示讚賞!

[編輯]

我得到這個從瀏覽器 - 不知道這是否是準確的,因爲它可能無法重現同樣的事情:

System.InvalidOperationException:請求格式是無效的:應用程序/ XML;字符集= UTF-8。在System.Web.Services.Protocols.HttpServerProtocol.ReadParameters()在System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()

[/編輯]

+3

如果它返回一個HTTP 500,表示你的服務器的某處拋出異常那是未被捕獲的。你能夠調試你的網絡方法嗎? – Tejs 2012-04-25 15:16:32

+0

對不起 - 我應該說我已經嘗試調試服務器代碼,但它似乎並沒有受到打擊。這意味着郵件格式有問題,但這一切對我來說都很合適! – CompanyDroneFromSector7G 2012-04-25 15:17:38

+0

使用Fiddler來查看會發生什麼。另一件事contentType是xml,dataType也是,但是你傳遞了一個JSON .. – 2012-04-25 15:18:21

回答

1

您發送JSON,但你有內容類型集到XML。嘗試改變它。

contentType: 'application/json; charset=utf-8', 
+0

該死的 - 你說得對!不能相信我錯過了這一點。現在唯一的問題是我得到錯誤函數捕獲的錯誤「200:OK」,而不是成功函數。有明顯的解決方案嗎? – CompanyDroneFromSector7G 2012-04-25 15:37:23

+0

錯誤問題是因爲我在說我正在處理JSON,但響應是XML。 :$ – CompanyDroneFromSector7G 2012-04-25 15:53:20

1

除了內容類型設置爲:

contentType: 'application/json; charset=utf-8', 

的XML,而不是像你這樣的有(如@Zachary說(我在評論:))說。您還需要實際發回XML。

說:

[ScriptMethod(ResponseFormat = ResponseFormat.Xml)] 

不您的字符串實際上編碼爲XML,它是所有的Content-type頭設置爲:

Content-Type: text/xml; charset=utf-8. 

居然要返回XML。這有點誤導。

編輯:實際上,讓我讚揚這一點。它確實 XML 除了當你發送一個字符串。你可以把它做這個包裹你的字符串中的XML:

[ScriptMethod(ResponseFormat = ResponseFormat.Xml,XmlSerializeString =真)]

+0

謝謝aquinas,雖然我回來的XML確定沒有問題。 :) – CompanyDroneFromSector7G 2012-04-25 15:43:05

+0

看到我更新的答案,看看是否有幫助。我試圖重現你的問題,並得到了你提到的同樣的事情,當我發回一個非xml字符串時,只要我將其更改爲XML,但它工作正常。 – aquinas 2012-04-25 15:46:22

+0

太棒了!現在運行良好。非常感謝 :) – CompanyDroneFromSector7G 2012-04-25 16:00:38