Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jquery parseJSON()在JSON为空时返回错误_Javascript_Jquery_Json - Fatal编程技术网

Javascript jquery parseJSON()在JSON为空时返回错误

Javascript jquery parseJSON()在JSON为空时返回错误,javascript,jquery,json,Javascript,Jquery,Json,当返回的JSON对象不包含数据时,JSON AJAX回调出现问题。我的代码如下: $.ajax({ type: "POST", url: "includes/get_menu_name.php", headers: {"cache-control": "no-cache"}, data: data, success: function(html) { //alert(html); var app_data = "";

当返回的JSON对象不包含数据时,JSON AJAX回调出现问题。我的代码如下:

$.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

我尝试了各种方法来检查回调中是否有数据,但似乎都不起作用。我对使用JSON非常陌生,我想知道如果没有数据可返回,是否应该通过php页面添加不同的回调,但是我想知道是否有办法通过javascript实现这一点。

$。ajaxwithpost将以字符串格式返回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
    }
}

在通过ajax获取json时,需要注意以下几点(以防它也抓住了您的问题)

1) 内容类型 当
内容类型:application/Json
html获取(意思是
内容类型:text/html
或等效内容)需要手动将json解析为字符串

2) Jquery版本 这不应该是一个问题,因为自版本1.5(您可能正在使用最新版本1.9)以来,它已经消退了 以下是与json相关的错误的链接:

对于json密集型编码,人们通常使用jQueryJSON(),它是简单jquery的包装器。您可能想考虑修复是否不容易。


我希望它至少部分地回答了这个问题。谢谢。

这里您可以指定要用作json的数据类型

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


在服务器端脚本中,您必须使用json_encode函数对数据进行编码。

我尝试了各种方法来检查是否有数据,哪些数据?我不认为您真的需要对html的有效性进行第二次检查,基本上,将if only放到
if(html)
,除此之外,基本上就是这样,有一个upvoteThis可以消除错误,但似乎不会触发
//做一些有趣的事情部分
中的函数。不过我会玩这个的。它正在过滤一个填充返回的空白返回-直到现在为止还没有发射我的代码。是的,还有什么部分,如果你没有得到HTML.MeNudiaTa,因为响应是错误的,你可以在其他部分播放。排序-改变<代码> $。每个($.PaSeJSON(HTML)。MenuData,…<代码> > <代码> $$。(html.MenuData,…
非常感谢:)
  $.ajax({
    type: 'POST',
    url: ajaxURL,
     data:data,
    dataType: 'json',
    success: function(data){
        JSON.parse(data);
    }