Получение неверной строки [] вокруг моего JSON, выведенного из класса JavascriptSerializer - PullRequest
0 голосов
/ 29 июня 2009

В настоящее время я использую вспомогательные методы, описанные здесь, чтобы вернуть JSON из моего .ashx: http://weblogs.asp.net/scottgu/archive/2007/10/01/tip-trick-building-a-tojson-extension-method-using-net-3-5.aspx

Проблема в том, что я обернут [и] вокруг моего JSON, который искажен ... jQuery не может поднять его в обратном вызове:

[{"ImageTag":"<img src="http://www.xxx.com/image/473.jpg" alt="">"},{"ImageTag":"<img src="http://www.xxx.com/image/485.jpg" alt="">"}]

Так что я не знаю, почему я получаю скобки вокруг этого. Вот моя реализация:

private void GetImagesJSON(HttpContext context)
{
    context.Response.ContentType = "text/plain";
    context.Response.Charset = Encoding.UTF8.ToString();

    int i = 1;

    List<Product> products = GetTestProducts();
    List<CtImageList> imageList = new List<CtImageList>();

    foreach(Product p in products)
    {
        string imageTag = HttpUtility.HtmlEncode(string.Format(@"<img src=""{0}"" alt="""">", ImageUrl(p.Image, false)));

        imageList.Add(new CtImageList{ImageTag = imageTag});
        i++;
    }

    string jsonString = imageList.ToJSON();
    context.Response.Write(jsonString);
}

Вот функция обратного вызова в jQuery, которая не может разобрать это из-за запуска [и]:

function itemLoadCallback(carousel, state) {

    // Only load items if they don't already exist
    if (carousel.has(carousel.first, carousel.last)) {
        return;
    }

    $.getJSON("http://localhost:59396/xxx/CHandler.ashx?action=productsjson",
        function(data) {
            $.each(data.items, function(i, item) {
                alert('got here');
                carousel.add(i, mycarousel_decodeEntities(item.ImageTag));
                if (i == 3) return false;
            });
        });
};

Ответы [ 2 ]

1 голос
/ 29 июня 2009

AFAIK, ваш ответ в формате JSON. Скобки служат для того, чтобы сообщить синтаксическому анализу JavaScript, что вы используете массив. Передача JSON в eval () вернет вам массив с 2 объектами.

Если ваш обратный вызов ожидает один объект «ImageTag», вы получите ошибку.

0 голосов
/ 29 июня 2009

На самом деле, это должно быть действительно JSON. «[» И «]» указывают на список, потому что вы вызвали ToJSON для списка объектов. Таким образом, вы должны рассматривать результаты как массив. Проверьте образец ниже ...

  <script type="text/javascript" src="jquery.js"></script>
  <script type="text/javascript">
    $(document).ready(function(){
       var a = eval("[1,2,3]");
       for(var i in a) { $("#results").append("<p>" + a[i] + "</p>"); } });
  </script>
  <div id="results"></div>

так что для вашего кода функция:

var images = eval('[{"ImageTag":"&lt;img src=&quot;http://www.xxx.com/image/473.jpg&quot; alt=&quot;&quot;&gt;"},{"ImageTag":"&lt;img src=&quot;http://www.xxx.com/image/485.jpg&quot; alt=&quot;&quot;&gt;"}]');
for(var i in images){
$("#mydiv").append(images[i].ImageTag);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...