ASP.NET jQuery AJAX извикването към PageMethod връща парсер грешка с отговор 200

От това, което мога да разбера, проблемът е, че PageMethod не връща JSON. Трябва ли да направя нещо друго от страната на сървъра, за да форматирам правилно върнатата стойност? Има ли нещо друго, което пропускам?

(Забележка: Тествам това за IE8 в момента)

От страна на клиента (с помощта на jQuery 1.8.0):

$.ajax({
            type: "POST",
            url: "Test.aspx/GetDate",
            data: "{}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: SuccessFunction,
            error: ErrorFunction
        });

От страната на сървъра:

<WebMethod()> _
Public Shared Function GetDate() As String
    Return Date.Now.ToString
End Function

person notnot    schedule 27.08.2012    source източник
comment
Така че, когато поставите application/json като тип съдържание, получавате ли данни в бекенда като JSON?   -  person insomiac    schedule 28.08.2012
comment
Бих предположил, че е така - трябва да се десериализира автоматично от .NET   -  person notnot    schedule 28.08.2012
comment
Също така се уверете, че връщате json данни от бекенда..   -  person insomiac    schedule 28.08.2012
comment
Така че от бекенда данните, които връщате, трябва да са в JSON. Тъй като сте посочили типа данни като json. Frontend ще очаква данните като json и ако получи нещо друго, ще ви даде грешка.   -  person insomiac    schedule 28.08.2012
comment
Преобразуването трябва да е автоматично. Опитвам се да разбера защо това автоматично преобразуване не се задейства.   -  person notnot    schedule 28.08.2012
comment
Нищо общо с JSON бита, използвайте Google Chrome или който и да е инструмент за отстраняване на грешки в Javascript, за да видите какво се връща и дали някакви грешки са се върнали в конзолата   -  person ShaunOReilly    schedule 28.08.2012


Отговори (2)


Добре, разбрах това въз основа на това по-стар въпрос. Оказа се, че имам нужда от следното в секцията system.web на моя файл web.config:

<httpModules>
  <add name="ScriptModule" 
     type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</httpModules>

Предполагам, че това се настройва автоматично за вас, ако създадете „AJAX уеб страница“ с Visual Studio, но се опитвах да добавя нещо към по-стара ASP.NET страница.

person notnot    schedule 27.08.2012

Следното работи за мен:

function GetShoppingCartData() {
    jQuery.ajax({
        type: "POST",
        url: "DesktopModules/EcomDnnProducts/AjaxProductDisplay.aspx/GetShoppingCartData",
        data: "{'CartId': '" + jQuery(".shoppingcartid").attr("value") + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        async: true,
        cache: false,
        success: function (msg) {
            //jQuery('#productattributesdata').text(msg.d);
            buildShoppingCart(msg.d);
        },
        fail: function (msg) {
            jQuery('#productattributesdata').text(msg.d);
        }
    });
}

нямате нужда от бит "данни:...".

Трябваше да направя промени в моята ASP страница, за да я накарам да работи. Моята функция изглежда така:

   <System.Web.Services.WebMethod()> _
    Public Shared Function GetShoppingCartData(ByVal CartId As String) As String
        Dim ReturnString As String = ""

        Try

            ReturnString  = "test1;test2;test3"

        Catch ex As Exception
            'ProcessModuleLoadException(Me, exc)
            Dim DataLogger As New DataLogger
            DataLogger.WriteToEventLog("Error", ex.Message & " - " & ex.StackTrace)
        End Try

        Return ReturnString
    End Function

Ще видя дали има други настройки...

Добавено е следното към web.config, за да се дадат разрешения за извикването на нещо:

<httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
      </customHeaders>
    </httpProtocol>
  </system.webServer>

Не съм сигурен дали това е липсващият момент.

Още няколко ресурса: http://msdn.microsoft.com/en-us/library/byxd99hx(v=vs.80).aspx

http://www.dotnetcurry.com/ShowArticle.aspx?ID=109

http://forums.asp.net/t/1298480.aspx/1

HTH Шон

person ShaunOReilly    schedule 28.08.2012