4

返された 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

エラーは次のように返されます。

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

コールバック内にデータがあるかどうかを確認するためにさまざまな方法を試しましたが、どれも機能していないようです。JSON を使用するのは初めてで、返すデータがない場合は、php ページを介して別のコールバックを追加する必要があるかどうか疑問に思っていますが、javascript を介してこれを行う方法があるかどうかを知りたいです。

4

3 に答える 3

2

$ .ajax with postは、次のような文字列形式の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
    }
}
于 2013-03-15T09:04:31.630 に答える
2

ここで、json として使用する dataType を指定できます。

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

});

また、サーバー側スクリプトでは、json_encode 関数を使用してデータをエンコードする必要があります。

于 2013-03-15T09:39:00.533 に答える
1

ajax 経由で json を取得する際に注意すべき点がいくつかあります (問題が発生した場合に備えて)

1) Content-Type Json 解析は、Content-type: application/json HTML フェッチ (意味Content-Type: text/htmlまたは同等のもの) が json を文字列として手動で解析する必要がある場合にスムーズに機能します。

2) Jquery のバージョン バージョン 1.5 (最新バージョンの 1.9 を使用している可能性があります) 以降は改善されているため、これは問題ではありません。json 関連のバグへのリンクは次のとおりです: http://bugs.jquery.com/ticket /8108

json を多用するコーディングでは、単純な jquery のラッパーであるjquery-json ( http://code.google.com/p/jquery-json/ ) を使用することがよくあります。修正が容易でない場合は、検討することをお勧めします。

少なくとも部分的に答えてくれることを願っています。ありがとう..

于 2013-03-15T09:12:15.247 に答える