Я использую необъяснимое поведение, используя jQuery 1.4.2, и начинаю думать, что это может быть проблема с сафари, а не проблема с jQuery.Позвольте мне объяснить.
Я начал достаточно просто, используя .getJSON, вот так:
$.getJSON("/challenge/results", form_data, function(data){
//I know console.log is bad news, just a simplification.
console.log('data', data);
}
И журнал дал мне что-то вроде
>locations: Array (1)
ХотяЯ ожидал массив размером 2. Итак, я посмотрел на json в ответе:
{"locations":
[{"customer_id":2,"editable":true,"id":971,"latitude":43.659208,"longitude":-79.407501,"max_zoom":25,"min_zoom":9,"name":"test"},
{"customer_id":3,"editable":true,"id":974,"latitude":36.746944,"longitude":-107.970899,"max_zoom":25,"min_zoom":9,"name":"test2"}]}
Я упростил это ради ясности, но, насколько я могу судить,Полученный json является абсолютно верным (генерируется программно через рельсы).[ Обновление: JSONLint подтверждает эту гипотезу.]
Я был удивлен этим, поэтому я преобразовал свой запрос в запрос $ .ajax, чтобы посмотреть, есть ли между ними какая-то небольшая разница (так какЗатем, просматривая исходный код jQuery, я вижу, что $ .getJSON просто вызывает $ .ajax).
$.ajax({
url:"/challenge/results",
dataType: 'json',
data: form_data,
cache:false,
success: function(data, textStatus){
console.log("data!", data, textStatus);
});
Но, увы!Тот же ответ:
location: Array (1) success
На данный момент, я должен признать - я становился немного глупым, поэтому я решил попробоватьчто-то полностью обречено на провал:
$.ajax({
url:"/challenge/results",
dataType: 'text',
data: form_data,
cache:false,
success: function(data, textStatus){
console.log("Parsed:!", $.parseJSON(data), textStatus);
});
К моему большому удивлению, моя консоль прочитала:
location: Array (2) success
Я былозадачен.В этот момент я зарылся на каблуках и долго внимательно изучал исходный код jQuery (1.4.2).Полагаю, неудивительно, что функция ajax, похоже, не обрабатывает сам синтаксический анализ json (хотя, должен признать, я не уверен).
Я в полном недоумении, почему это может происходить - любая помощь приветствуется.