Возврат данных из обратного вызова jQuery ASP.NET 2.0 - PullRequest
0 голосов
/ 17 декабря 2009

Я новичок в jQuery и реализую пример, который нашел в CodeProjects.

Мне нужно получить строку с именем изображения и новым индексом изображения, возвращаемым из вызываемого мной метода PageMethod. Однако каждый раз, когда я пытаюсь вернуть что-то другое, чем число через Response. Записать обратный вызов не удается, и я перехожу к функции ошибки.

$(document).ready(function() {

var imageIndex = $("[id$='hdn_imageIndex']");
var app_path = $("[id$='hdn_app_path']");

$("#btn_next").click(function() {

    var json = "{'Index':'" + imageIndex.val() + "'}";
    var ajaxPage = app_path.val() + "/JSONProcessor.aspx?NextImage=1"; //this page is where data is to be retrieved and processed
    var options = {
        type: "POST",
        url: ajaxPage,
        data: json,
        contentType: "application/json;charset=UTF-8",
        dataType: "json",
        async: false,
        success: function(result) {

            alert("success: " + result.d);
            // I want my return value from my PageMethod HERE.
        },
        error: function(msg) { alert("failed: " + msg.d); }
    };

    var returnText = $.ajax(options).responseText;

});

});

PageMethod в JSONProcessor.aspx выглядит так:

public void NextImage()
{
    System.IO.StreamReader sr = new System.IO.StreamReader(Request.InputStream);
    string line = "";
    line = sr.ReadToEnd();
    JObject jo = JObject.Parse(line);

    int newImageIndex = -1;
    int oldImageIndex = int.Parse(Server.UrlDecode((string)jo["Index"]));
    List<string> images = (List<string>)Session["ShowHouseImages"];
    int noOfImages = images.Count;

    if (noOfImages > 0)
    {
        if (oldImageIndex == noOfImages - 1)
        {
            newImageIndex = 0;
        }
        else
        {
            newImageIndex = oldImageIndex + 1;
        }

        string[] result = ChangeImage(newImageIndex, images);

        Response.StatusCode = 200;
        Response.Write("1");
        // What I REALLY WANT TO RETURN IS THIS
        // Response.Write(string.Format("{0};{1};{2}", result[0], result[1], result[2]));
    }

    Response.Write("0");
}

Возвращение JSON из WebMethods, похоже, не является частью .NET 2.0. Вот почему я делаю это так. Надеюсь, кто-нибудь может мне помочь.

1 Ответ

1 голос
/ 17 декабря 2009

Насколько я понимаю в строке

Response.Write(string.Format("{0};{1};{2}", result[0], result[1], result[2]));

вы не возвращаете правильный объект JSON. Вероятно, он должен выглядеть примерно так:

Response.Write(string.Format("{{images:[{0},{1},{2}]}}", result[0], result[1], result[2]));

Возвращает массив из трех элементов. Полученная продукция должна быть:

{images:[1,2,3]}

В JavaScript вы можете получить доступ к данным, используя result.images [0], result.images 1 и т. Д. Я не уверен, если вам нужно указать имя объекта массива (изображения).

Я предлагаю вам взглянуть на веб-сайт JSON , чтобы лучше понять синтаксис. Таким образом, вы сможете сами построить сложный объект.

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