JSON и Python Django - не удается обойти проблему с одним и тем же источником - функция обратного вызова не вызывается

Я звоню

$.getJSON('http://localhost:8000/polls/?callback=?', функция (данные)

и получаю ошибку:

Ошибка: parsererror errorThrown: jQuery16103397698865741826_1320825997345 не вызывался

Если я вызываю файл json, который находится рядом с моим файлом html, он работает нормально. Если я назову пример URL-адреса Google: http://www.highcharts.com/samples/data/jsonp.php?filename=aapl-c.json&callback=?, это также сработает.

Есть идеи? Я думаю, что, возможно, это как-то связано с DJango или с тем, как я возвращаюсь из кода на стороне сервера.

index(request):

    a = {}
    a[1320675940] = 1.8
    a[1320675941] = 2.8
    a[1320675942] = 38
    a[1320675943] = 4.8
    a[1320675944] = 5.8
    a[1320675945] = 6.8
    a[1320675946] = 7.8

    data = simplejson.dumps(a)

    return HttpResponse(data, mimetype="text/plain")
    #return HttpResponse(data, mimetype="json")
    #return HttpResponse(str(data), mimetype="text/plain")

person AYBABTU    schedule 09.11.2011    source источник
comment
См. stackoverflow.com/questions/ 3076414/   -  person tylerl    schedule 09.11.2011
comment
@tylerl Я не уверен, что это проблема, поскольку URL-адрес Google работает и явно не в моем домене. Я не веб-разработчик, поэтому я немного потерялся здесь.   -  person AYBABTU    schedule 09.11.2011
comment
Получаете ли вы действительный JSON, если напрямую вызываете http://localhost:8000/polls/?callback=??   -  person PiTheNumber    schedule 09.11.2011
comment
@PiTheNumber - да. Запустил валидатор и он действителен   -  person AYBABTU    schedule 09.11.2011
comment
Я думаю, что JSON здесь не в центре внимания. Это сценарий Django, который я написал. Поскольку Google возвращает формат JSON-P. Это не проходит проверку сайта, который вы мне посоветовали. Если бы это было проблемой, я бы получил ошибку синтаксического анализа JSON - я думаю, что эта ошибка связана с синтаксическим анализом пакета ответа.   -  person AYBABTU    schedule 09.11.2011


Ответы (1)


Вы возвращаете JSON (с обычным текстовым типом содержимого), а не JSON-P.

Вам нужно посмотреть значение callback в строке запроса и обернуть JSON в этот вызов функции.

например для ?callback=foo:

foo(/* Your JSON here */);

Вы также должны использовать правильный тип контента (application/javascript).

person Quentin    schedule 09.11.2011
comment
Спасибо - это сработало. Можете ли вы объяснить, почему мне нужно сделать это явно? - person AYBABTU; 09.11.2011
comment
@AYBABTU — поскольку JSON-P работает, определяя функцию, а затем загружая скрипт, который вызывает эту функцию. - person Quentin; 09.11.2011