aspx и jquery.ajax всегда возвращают ошибку - PullRequest
0 голосов
/ 18 июня 2011

Этот код прекрасно работал в mvc2, но вернулся к традиционному ASPX (из-за Sharepoint 2010).Я сталкиваюсь с ошибками.Может кто-нибудь сказать мне, что я делаю неправильно для этой платформы?

Этот вызов ajax находится в коде $ .ready

$.ajax({
        type: "POST",
        dataType: "json",
        data: 'siteName=a&siteUrl=b',
        url: 'Wizard.aspx/DoesNameUrlExist',
        beforeSend: function () { alert("before send"); },
        complete: function () { alert("complete"); },
        success: function (data) { alert("success"); },
        error: function (data) {
            if ($("meta[name=debug]").attr("content") == "true") {
                //Full Error when debugging
                var errDoc = window.open();
                errDoc.document.write(data.responseText);
                errDoc.document.close();
            }
            else {
                // generic error message for production use
                alert("An unexpected error occurred.");
            } return false;
        }
    });

, стоящем за

[WebMethod]
public static string DoesNameUrlExist(string siteName, string siteUrl)
{
    //do something
    return someString;
}

Я получаюошибка каждый раз.

Ответы [ 2 ]

1 голос
/ 18 июня 2011

Вам необходимо отправить JSON в службу и указать, что вы делаете это через заголовок contentType:

$.ajax({
    type: "POST",
    contentType: 'application/json',
    data: '{"siteName":"a","siteUrl":"b"}',
    url: 'Wizard.aspx/DoesNameUrlExist',
    beforeSend: function () { alert("before send"); },
    complete: function () { alert("complete"); },
    success: function (data) { alert("success"); },
    error: function (data) {
        if ($("meta[name=debug]").attr("content") == "true") {
            //Full Error when debugging
            var errDoc = window.open();
            errDoc.document.write(data.responseText);
            errDoc.document.close();
        }
        else {
            // generic error message for production use
            alert("An unexpected error occurred.");
        } return false;
    }
});

Подробнее здесь: http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/

Кроме того, если вы используете jQuery 1.4, вы можете сбросить dataType. jQuery выведет JSON автоматически на основе заголовка Content-Type ответа .

0 голосов
/ 18 июня 2011

Ajax-вызовы в jQuery всегда выдадут вам ошибку, если вы объявите свой contentType как json, а тип содержимого ответа будет отличным от json.Если ответ от вашего WebMethod имеет что-то другое (например, HTML или текст), вы всегда получите эту ошибку.Вы можете установить этот тип ответа для вашего метода следующим образом:

[WebMethod]
[ScriptMethod (UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
public static string DoesNameUrlExist(string siteName, string siteUrl)

Вне WebMethods этого также можно достичь следующим образом:

Response.ContentType = "application/json";
...