2012-01-15 2 views
3

Я использую jquery ui tabs с ajax.jQuery UI Tabs: JSON не отображается

Ajax столкнется с таким содержанием JSON.

[ 
    { 
    "title" :"a note", 
    "type" :"text", 
    "content" :"MY FIRST NOTE!" 
    }, 
    { 
    "title" :"two note", 
    "type" :"text", 
    "content" :"MY FIRST NOTE <b>if html works<\/b> i should pay attention to this!" 
    } 
] 

Я использую этот код:

$(function() { 
    $("#tabs").tabs({ 
     cache : false, 
     ajaxOptions : { 
      cache : false, 
      dataType : 'json', 
      dataFilter : function(result) { 
       var data = $.parseJSON(result); 
       return data; 
      }, 
      error : function(xhr, status, index, anchor) { 
       $(" anchor.hash ").html("Couldn't load this tab. We'll try to fix this as soon as possible. " + "If this wouldn't be a demo."); 
      } 
     } 
    }); 
}); 

(я видел этот вопрос Loading JSON-encoded AJAX content into jQuery UI tabs)

JSON-файл (генерируется PHP) правильно загружена и я подтверждено он использует JSONLint, но вкладка остается белой, а содержимое не загружается, можете ли вы мне помочь?

Это первый раз, когда я работаю с JSON и Ajax так что простите меня, если я делаю какие-то дурацкие ошибки

EDIT: содержание JSON отправляется с типом содержимого = приложения/JSON, удаляя тип содержимого он отображает json, но я хочу разобрать json-файл, используя jquery, что это возможно?

+0

Вы пытались использовать: return data.content вместо данных возврата –

ответ

5

Я думаю, вы не должны звонить $.parseJSON(result);, так как вы указали dataType : 'json' (см. Мой ответ на этот вопрос Why is 'jQuery.parseJSON' not necessary?), и поэтому jQuery анализирует ответ для вас. Глядя на другой, например, вы также должны вернуть

 dataFilter : function(result) { 
      var data = $.parseJSON(result); 
      return data.content; 
     }, 

EDIT - позволяя dataType: 'json' это должно быть нормально

 dataFilter : function(result) { 
      return result.content; 
     }, 
+1

он работает с добавлением dataType: html –

+0

@MatteoPagliazzi да, но вы должны позволить 'dataType: 'json'' и просто' return result.content' я добавил, что мой ответ –

+0

удаление parseJSON и использование dataType: 'json' не работает .... –

2

Содержимое не правильно загружена на вкладку из этой части:

dataType : 'json', 
dataFilter : function(result) { 
    var data = $.parseJSON(result); 
    return data; 
} 

Вы получаете данные как json, поэтому result - это объект javascript. Но $.parseJSON() требует строки, а не объекта (see docs). Он работает - как вы пишете - когда dataType : 'html', потому что эти данные настроек возвращаются в виде текста.

Чтобы исправить это, вы можете либо установить dataType : 'html', либо избавиться от части dataFilter. Когда вы запрашиваете данные в json-формате, jQuery вызывает $.parseJSON() внутренне.

UPDATE: Еще одна информация, почему вы не получаете никаких ошибок с $.parseJSON() - По JQuery 1.4, если файл JSON содержит синтаксическую ошибку, то запрос будет обычно не молча see docs too

0

Я нашел его проще вернуть false обработчику beforeLoad и отправить запрос getJSON из beforeLoad. См. Мой ответ here.