Как использовать строку JSON в JavaScript - PullRequest
2 голосов
/ 22 июня 2010

У меня есть функция

 var url = "MyAvailability.aspx?mode=get";

        $.get(url,
        function(data) {
            alert(data);
        });

, которая возвращает строковое представление Json

events: [{'id': 1,'start': new Date(year, month, day, 12),'end': new Date(year, month, day, 13, 30),'title': 'Lunch with Mike'},{'id': 2,'start': new Date(year, month, day, 14),'end': new Date(year, month, day, 14, 45),'title': 'Dev Meeting'},{'id': 3,'start': new Date(year, month, day + 1, 17),'end': new Date(year, month, day + 1, 17, 45),'title': 'Hair cut'},{'id': 4,'start': new Date(year, month, day - 1, 8),'end': new Date(year, month, day - 1, 9, 30),'title': 'Team breakfast'},{'id': 5,'start': new Date(year, month, day + 1, 14),'end': new Date(year, month, day + 1, 15),'title': 'Product showcase'},{'id': 6,'start': new Date(year, month, day, 10),'end': new Date(year, month, day, 11),'title': 'I'm read-only',readOnly: true'}]';

If i do alert(data);

, она работает, но если я пытаюсь присвоить данные переменной, она не работает.

моя цель - вернуть из функции что-то вроде

 return {
        events: [
        {
            "id": 1,
            "start": new Date(year, month, day, 12),
            "end": new Date(year, month, day, 13, 30),
            "title": "Lunch with Mike"
        },
        {
            "id": 2,
            "start": new Date(year, month, day, 14),
            "end": new Date(year, month, day, 14, 45),
            "title": "Dev Meeting"
        },
        {
            "id": 3,
            "start": new Date(year, month, day + 1, 17),
            "end": new Date(year, month, day + 1, 17, 45),
            "title": "Hair cut"
        },
        {
            "id": 4,
            "start": new Date(year, month, day - 1, 8),
            "end": new Date(year, month, day - 1, 9, 30),
            "title": "Team breakfast"
        },
        {
            "id": 5,
            "start": new Date(year, month, day + 1, 14),
            "end": new Date(year, month, day + 1, 15),
            "title": "Product showcase"
        },
        {
            "id": 6,
            "start": new Date(year, month, day, 10),
            "end": new Date(year, month, day, 11),
            "title": "I'm read-only",
            readOnly: true
        }
    ]
    };

, но я не могу

, если я вернусь, данные не работают

можетВы помогаете мне, пожалуйста, я схожу с ума от этого

Ответы [ 3 ]

3 голосов
/ 22 июня 2010

Похоже, вы не указали формат данных в вашем вызове .get.Пожалуйста, попробуйте это:

$.get(url,
function(data) {
    alert(data);
},"json");

или рассмотрите возможность использования метода .getJSON из jquery

1 голос
/ 22 июня 2010

Ваш вопрос не слишком ясен, просто сказать, что «это не получается» или «это не работает», мало что поможет. Однако, если вы возвращаете ответ json в браузер, вам следует:

  1. Используйте метод $.getJSON вместо $.get ИЛИ

  2. Установите тип данных вашего $.get запроса на "json".

Если вы не выполните ни одного из этих действий, вам нужно будет вручную проанализировать возвращенную строку в объект, выполнив:

var myObj = eval('(' + data + ')');

где переменная данных содержит возвращенную строку json.

0 голосов
/ 22 июня 2010

Проблема на самом деле не в операторе return, а в том, что функция, в которой она находится, вызывается асинхронно . Таким образом, если вы поместите свой вызов $.get() в функцию, то эта функция вернет до вызова этой функции обратного вызова.

Вместо работы с возвращаемым значением, пусть сама функция выполняет работу (или вызывает какую-то другую функцию для выполнения работы).

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