>>> import traceback >>> def x(): >>> print traceback.extract_stack() >>> x() [('
', 1, ' ', None), (' ', 2, 'x', None)] можно также приятно отформатировать отслеживание стека, видеть эти документы .
Редактирование : Для моделирования поведения Java, как предложено @Douglas Leeder, добавляет, это:
import signal import traceback signal.signal(signal.SIGUSR1, lambda sig, stack: traceback.print_stack(stack))
к запуску кодируют в Вашем приложении. Тогда можно распечатать стек путем отправки
SIGUSR1
к рабочему процессу Python.
Проблема заключается в службе JSONP, она полностью отклоняет параметр обратного вызова
.
Ответ JSONP - это просто функция вызов с использованием обратного вызова
получить параметр в качестве имени функции:
Если вы посмотрите ответ какой-либо службы JSONP, он должен быть таким:
http://somesite.com/jsonp?callback = myCallback
Будет возвращено:
myCallback({/*json*/});
В то время как тот , который вы публикуете , возвращает простой действительный JSON, но его нельзя обрабатывать как Ответ JSONP .
Хм. Я не знаю jQuery, но знаю JSON. (Я написал для него парсер на C ++.)
Я перешел по указанному вами URL: http://www.codemash.org/rest/sessions.json?format=jsonp&callback=?
. Парсер Python JSON принимает это, и мой опыт показывает, что парсер Python JSON правильный. Обратите внимание, что это:
{ "blah": "string " More more more" }
... действительный JSON. Часть & quot;
не получает специальной интерпретации в JSON - это просто символы в строке.
Изменить: если присмотреться к этому, я нахожу очень интересным, что все, что генерирует это, ускользает некоторые косые черты, но не все. Пунктами «Начало» являются «/ Дата (-XXXXX) /», то есть текст / Дата (-XXXXX) /
- / в JSON может быть экранирован. Однако в элементах с ключами "SpeakerURI" и "URI" они не экранируются.
Изменить: прогнать это через мой синтаксический анализатор на основе C ++. Изначально не брал,
Проанализировав ваши данные за час,
я обнаружил следующее:
{
"URI":"/rest/sessions/Maintainable-ASPNET-MVC",
"Title":"Maintainable ASP.NET MVC",
"Abstract":".....\u003e\u2028Duration: 60-90 minutes\u003cbr\u003e\u2028Subject Area: development....."
}
Перед продолжительностью стоит символ \ u2028, а предметная область,
\ u2028 - это разделитель строк, поэтому его значит, что-то вроде \ n, так что между кавычками "" есть разрыв строки, это может быть корневой регистр.
Если вы удалите это, вы не увидите незавершенный строковый литерал в firebug.
Чтобы проверить это, вставьте следующее в адресную строку, Firefox и Opera не работают, в то время как IE8 и Chrome работают
javascript:alert(eval('[{"Abstract":"\u003e
Duration: 60-90 minutes\u003cbr\u003e
Subject Area: development."}]'))
кто-то уже писал об этом
http://bulknews.typepad.com/blog/2009/02/json- jquery-and-some-unicode-characters-u2028.html
Вы можете попробовать плагин jquery-jsponp, который устраняет некоторые проблемы с обработкой jQuery jsonp.
http: / /code.google.com/p/jquery-jsonp/
Я использую его, и есть много отличных примеров.
Вам действительно нужно, чтобы ваши обратные вызовы работали, чтобы вы могли видеть, что происходит.
Обновление: я попытался использовать jsonp и получаю неожиданные ошибки токена. Не знаю почему - я могу вручную получить данные из URL-адреса, назначить их переменной JavaScript в консоли, и все в порядке.
I don't appear to be any closer to a client side solution. I changed the code to use jQuery-jsonp. It now looks like this:
$(function() {
$.jsonp({
url: "http://www.codemash.org/rest/sessions.json?format=jsonp&callback=?",
async: false,
dataType: "jsonp",
success: successFunc,
complete: completeFunc,
error: errorFunc,
dataFilter: dataFilterFunc
});
});
function successFunc(json, textStatus) {
console.log('successFunc(). enter.');
}
function completeFunc(xOptions, textStatus) {
console.log('complete(). textStatus: ['+textStatus + ']');
}
function errorFunc(xOptions, textStatus) {
console.log('errorFunc(). textStatus: [' + textStatus + ']');
}
function dataFilterFunc(j) {
console.log('dataFilterFunc(). enter.');
return j;
}
Firebug's console log displays:
X unterminated string literal
[{"URI"..... ( the json returned from the server
errorFunc(). textStatus: [error]
complete(). textStatus: [error]
For whatever reason, the json parse in my Firefox browser (FF v3.0.15, Linux Ubuntu 9.0.4) is throwing the "unterminated string literal" exception. I know if I remove the '& q u o t' strings and two characters in the 'Maintainable ASP.NET MVC' block then the json will parse successfully. Since I have no control on the server side, is there any thing I can do with client-side javascript that will eventually get the server's json string, as-is, into a client side json object. I thought the dataFilter property for jsonp was set up exactly for that purpose, to intercept the json and 'scrub' it. However, that function in my code is not called, quite possibly because the json that is passed into the dataFilterFunc function will not parse successfully.