Почему мне нужно использовать .d для доступа к данным, возвращаемым jQuery AJAX? - PullRequest
10 голосов
/ 14 октября 2010

Я собрал некоторый код jQuery AJAX, используя некоторые учебники, которые я нашел в Интернете. Я новичок в jQuery и хочу научиться делать вещи лучше. У меня есть коллега, который создал красивое веб-приложение с использованием большого количества jQuery.

Здесь меня больше всего смущает то, почему необходимо использовать «.d» при обращении к ответу моего веб-метода и что оно обозначает?

    // ASP.net C# code
    [System.Web.Services.WebMethod]
    public static string hello()
    {
        return ("howdy");
    }

// Javascript code
function testMethod() {
    $.ajax({
        type: "POST",
        url: "ViewNamesAndNumbers.aspx/hello",
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(msg) {
            alert(msg);   // This doesn't display the response.
            alert(msg.d); // This displays the response.
        } // end success:
    }) // end $.ajax

Ответы [ 3 ]

13 голосов
/ 14 октября 2010

Он был добавлен в ASP.NET 3.5 версии ASP.NET AJAX, чтобы предотвратить вашу уязвимость для этого эксплойта: http://haacked.com/archive/2009/06/25/json-hijacking.aspx

(Ответ от http://encosia.com/2009/06/29/never-worry-about-asp-net-ajaxs-d-again/)

5 голосов
/ 14 октября 2010

Microsoft делает это, чтобы защитить вас от взлома безопасности. См. Эта страница для получения дополнительной информации.

4 голосов
/ 14 октября 2010

Полагаю, alert(msg) отображает «[объект объекта]»?

Если так, то это потому, что объект, который анализируется через window.JSON (что происходит под капотом при указании json в качестве dataType), делаетдействительно посмотрите:

object = {
    d:   "some data"
}

Проверьте, что вы генерируете в ViewNamesAndNumbers.aspx / hello

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...