无法解析来自服务器的Cakephp Jquery Datatable JSON数据

时间:2015-05-25 16:52:34

标签: javascript php jquery json cakephp

我使用 cakephp和jquery(v 1.2.0)发出以下警告: DataTables警告(表id ='tblinv'):DataTables警告:无法解析来自服务器的JSON数据。这是由JSON格式错误引起的。

这是我的脚本代码

  var dt;
var tipoStock = "lkdfjdklfjdklfjd";   /* pm 3.2.2015 */




$(document).ready(function () {
    $("#filtro-semaforos").chosen({
        allow_single_deselect: true,
        disable_search: true,
        width: '40px'
    });

    dt = $("#tblinv").DataTable({
        "bProcessing": true,
        "bServerSide": true,
        'sAjaxSource': "<?php echo $this->base; ?>/Inventarios/stock<?php if(!empty($tipoInventario)){ echo "/".$tipoInventario; } ?>",
                    'bAutoWidth': false,
                    'bSort': true,
                    "oSearch": {"bRegex": false, "bSmart": true},
                    "decimal": ",",
                    "thousands": ".",
                    'iDisplayLength': 20,
                    "sPaginationType": "full_numbers",
                    "sDom": 'T<"clear">lfrtip',
                    //"aoColumns": [null, null, null, null, null, {"sType": 'numeric-comma'}, {"sType": 'numeric-comma'}, {"sType": 'numeric-comma'}, null, null, null,null],
                    //   "oTableTools": {

                    // },

                    "oTableTools": {
                        "sSwfPath": "<?php echo $this->webroot; ?>js/plugins/datatables/swf/copy_csv_xls_pdf.swf",
                        "aButtons": [
                        ]
                    },
                    "aaSorting": [],
                    "fnRowCallback": function (nRow, aData, iDisplayIndex, iDisplayIndexFull) {
                        $(nRow).children().each(function (index, td) {
                            switch (index)
                            {
                                case 5:
                                    {
                                        if ($(td).html() !== '')
                                        {
                                            $(td).addClass("pesos");
                                            $(td).addClass("derecha_p");
                                        }
                                    }
                                    break;
                                case 6:
                                    {
                                        if ($(td).html() !== '')
                                        {
                                            $(td).prepend('<small class="small">US$&nbsp;&nbsp;</small>');
                                            $(td).addClass("derecha_p");

                                            //$(td).addClass("usd");

                                        }
                                    }
                                    break;
                                case 7:
                                    {
                                        if (parseInt($(td).html()) <= 0)
                                        {
                                            $(td).css("color", "red");
                                        }
                                        $(td).addClass("tdr");
                                        $(td).addClass("gran");
                                    }
                                    break;
                                case 8:
                                    {
                                        $(td).html($('<small>').append('&nbsp;&nbsp;' + $(td).html()));
                                    }
                                    break;


                                case 11:
                                    $(td).css("display", "none");
                                    break;
                            }
                        });
                        return nRow;
                    },
                    "fnInitComplete": function () {
                        $("#cargando").hide();
                        $("#divtbl").fadeIn('slow');
                    }



                });

                // dt.fnFilter( 'Buscar....');  // Codigo Original. pm para que e traiga la busqueda vacia de entrada
                dt.fnFilter('');  // pm para que e traiga la busqueda vacia de entrada

                // workaround por Diego:
                // vaciar el contenido para que quede sin el "Buscar.."    

// $(“#tblinv_filter input”)。val(“”);

                String.prototype.replaceAll = function (str, str2) {
                    return this.split(str).join(str2);
                };
                // nota Diego: esto pareciera que no funciona, está de más
                $("thead input").keyup(function () { 
                    dt.fnFilter(HtmlEncode(this.value), $("thead input").index(this));
                });
                var p = false;
                jQuery.extend(jQuery.fn.dataTableExt.oSort, {
                    "currency-pre": function (a) {
                        return parseFloat(a.replaceAll("$", "").replaceAll('usd', '').replaceAll(".", "").replaceAll(",", "."));
                    },
                    "currency-asc": function (a, b) {
                        return a - b;
                    },
                    "currency-desc": function (a, b) {
                        return b - a;
                    }
                });

                $('#tblinv').dataTable().fnClearTable();

                $('#tblinv_filter label input:text').focus();  // pm 18.2.2015 a ver si hace focus


            });


            //  document.getElementById('tblinv').style.display = 'none';   // pm agrega 18.2

有什么想法吗?我看不到格式错误...

1 个答案:

答案 0 :(得分:1)

我有一个简单但有效的解决方案,当我们进行多次搜索(我们键入并删除并再次输入几个单词)时,json会受到损坏而且代码不会发送任何json,所以我们需要在完成后重绘数据表过滤器

  $("thead input").keyup(function () { 
                dt.fnFilter(HtmlEncode(this.value), $("thead input").index(this));
                dt.fnDraw();
  });

这就是全部,因为我正在使用服务器端,我不需要重新加载ajax,只需重绘,我希望这有助于某人。