2013-03-15 55 views
4

當返回的JSON對象不包含數據時,我遇到了JSON AJAX回調的問題。我的代碼如下:當JSON爲空時,jquery parseJSON()返回錯誤

$.ajax({ 
    type: "POST", 
    url: "includes/get_menu_name.php", 
    headers: {"cache-control": "no-cache"}, 
    data: data, 
    success: function(html) { 
     //alert(html); 
     var app_data = ""; 
     if (html.MenuData != 0) { 
      $.each($.parseJSON(html).MenuData, function() { 
       app_data += "<li data-short='"+this['dish_short']+"' data-desc='"+this['dish_desc']+"' data-dish_id='"+this['dish_id']+"'>"+this['dish_name']+"</li>"; 
      }); 
      $('.listbox').show(); 
      $('.nameslist').html(app_data); 
      $('li').hover(function() { 
       $(this).addClass('hover2'); 
      },function(){ 
       $(this).removeClass('hover2'); 
      }); 
      if (html == "") { 
       $('.listbox').hide(); 
      } 

      $('li').click(function() { 
       //alert($('li', this).data('short')); 
       $('.price').val(""); 
       var main_name = $(this, 'li').text(); 
       $('.main_name').val(main_name); 
       //$('.price').val($(this).find('.ajaxid').text()); 
       if(main_name.length > 40) { 
        $('.short_name').val($(this).data('short')) 
       } else { 
        $('.short_name').val(main_name); 
       } 
       if($(this).data('desc')!="") { 
        $('.dish_desc').val($(this).data('desc')); 
       } 
       var dish_id=$(this).data('dish_id'); 
       $('.main_name').data('dish_id', dish_id); 
       $('.listbox').hide(); 
      }); 
     } 
    } 
});//end ajax 

錯誤回來爲:

TypeError:$.parseJSON(...) is null 

我已經嘗試了各種方法,以檢查是否存在回調中的數據,但似乎沒有工作。我對使用JSON非常陌生,想知道如果沒有數據要返回,我是否應該通過php頁面添加不同的回調函數,但是想知道是否有方法通過javascript來實現。

+0

*我試過各種方法來檢查是否有數據*哪些? – Bigood 2013-03-15 09:05:31

回答

2

$ .ajax將返回字符串格式的HTML你需要這樣的東西!

success:function(html) 
{ 
    if(html) 
    { 
     try 
     { 
      html = JSON.parse(html); 
      if(html.MenuData) 
      { 
       // do something interesting 
      } 
      else 
      { 
       // failed 
      } 
     } 
     catch(e) 
     { 
      // failed 
     } 
    } 
    else 
    { 
     // failed because response is empty 
    } 
} 
+2

我不認爲你真的需要第二次檢查html的有效性,基本上,放棄,如果只是'if(html)',除此之外,這是非常多的,有一個upvote – 2013-03-15 09:08:17

+0

是啊謝謝! – 2013-03-15 09:13:10

+0

這樣可以擺脫錯誤,但似乎不會觸發'//做一些有趣的事情'。這個雖然會有發揮。它正在過濾來自填充返回的空白返回 - 到目前爲止,只是沒有激發我的代碼。 – Sideshow 2013-03-15 09:17:07

1

在拿通過AJAX JSON,這裏有幾點需要注意(櫃面它吸引了你的問題太)

1)內容類型 JSON解析會流利地工作時,Content-type: application/json 一個html取(意思是Content-Type: text/html或同等學歷)需要手動解析json爲String。

2)jQuery的版本 這不應該是一個問題,因爲它已經平息版本:1.5(你可能會使用最新的一個,1.9) 下面是相關的JSON鏈接錯誤:http://bugs.jquery.com/ticket/8108

對於json密集編碼,人們經常使用jquery-json(http://code.google.com/p/jquery-json/),它是一個簡單的jQuery包裝器。您可能需要考慮修復是否不容易。

我希望它至少部分回答。謝謝..

2

在這裏,您可以指定的dataType爲JSON使用

$.ajax({ 
    type: 'POST', 
    url: ajaxURL, 
    data:data, 
    dataType: 'json', 
    success: function(data){ 
     JSON.parse(data); 
    } 

});

而在服務器端腳本中,您必須使用json_encode函數編碼數據。