tablesorter和dataTable都没有使用ajax

时间:2016-04-08 04:54:07

标签: php ajax datatables tablesorter

我已尝试过tablesorter和datatables以获得排序功能。有了这两个,我能够看到排序箭头(和过滤框,页面......与dataTables;虽然它们都不工作),但它们会改变,但数据不会被排序。

这是ajax(与dataTables相同但是使用' dataTable'而不是' tablesorter'。

$.ajax({
    type: "GET",
    url: "search.php",
    data: {data : encrypted.data, salt: enc_salt},
    success: function(enc_response){
        var response = decrypt_cryptojs(enc_response, encrypted.salt);
        var data = JSON.parse(response);
        $("#search_result").html(data);

        // Initialise tablesorter
        $('#search_table').tablesorter();
    } 
});

我用php创建表:

if (mysqli_num_rows($result) > 0) {
    $message .= "<table id='search_table' class='tablesorter'>
        <thead><tr>
            <th id='search_user'>Usuario</th>
            <th id='search_name'>Nombre</th>
            <th id='search_surnames'>Apelidos</th>
            <th id='search_email'>Correo</th>
            <th id='search_role'>Rol</th>
            <th id='search_access'>Acceso</th>
            <th id='search_center'>Centro</th>
            <th id='search_edit'></th>
            <th id='search_delete'></th>
        </tr></thead>";
    while ($row = mysqli_fetch_row($result)) {
        // Define $id
        $id = $row[7];

        // Replace space(" ") whith "&#32" to avoid errors inside functions
        $user = str_replace(" ", "&#32", $row[0]);
        $name = str_replace(" ", "&#32", $row[1]);
        $surnames = str_replace(" ", "&#32", $row[2]);
        $center = str_replace(" ", "&#32", $row[6]);

        $message .= "<tbody><tr>
                <td>" . $row[0] . "</td>" .
                "<td>" . $row[1] . "</td>" .
                "<td>" . $row[2] . "</td>" .
                "<td>" . $row[3] . "</td>" .
                "<td>" . $row[4] . "</td>" .
                "<td>" . $row[5] . "</td>" .
                "<td>" . $row[6] . "</td>" .
                "<td>" .
                    "<input type='image' src='../resources/edit.png' id='edit_" . $row[0] . "' class='edit' onclick=edit_user(\"$user\",\"$name\",\"$surnames\",'$row[3]','$row[4]','$row[5]',\"$center\",'$id') title='Editar'></button>" . 
                "</td>" .
                "<td>" .
                    "<input type='image' src='../resources/delete.png' id='delete_" . $row[0] . "' class='delete' onclick=delete_user('$user','$row[4]') title='Eliminar'></button>" . 
                "</td>
            </tr>";
    }
    $message .= "</tbody></table>";
    $message .= "<div id='modify_panel'></div>";
}

之后:

  // Encode the message using json
  $response = json_encode($message);

  // Encrypt the response and send it.
  $enc_response = encrypt_cryptojs($response, $salt);
  echo $enc_response;

使用数据表我可以看到消息说我有一个无效的json响应。

&#34;#search_result&#34;是在另一个php文件中包含的php文件中。

我做错了什么?

谢谢。

编辑:我发现了这个愚蠢的错误,我正在制造几个tbodys。如果我在外面移动标签,它就可以了。遗憾。

1 个答案:

答案 0 :(得分:0)

看起来问题可能出在JSON的编码和处理中。

JSON不能只是一个字符串。它需要包装在一个数组或对象中,所以当你使用php /* str should be in the form of a valid f?p= syntax */ function htmldb_Get(obj,flow,req,page,instance,proc,queryString) { // // setup variables // this.obj = $x(obj); // object to put in the partial page this.proc = proc != null ? proc : 'wwv_flow.show'; // proc to call this.flow = flow != null ? flow : $x('pFlowId').value; // flowid this.request = req != null ? req : ''; // request this.page = page; // page this.params = ''; // holder for params this.response = ''; // holder for the response this.base = null; // holder fot the base url this.queryString = queryString!= null ? queryString : null ; // holder for passing in f? syntax this.syncMode = false; // // declare methods // this.addParam = htmldb_Get_addParam; this.add = htmldb_Get_addItem; this.getPartial = htmldb_Get_trimPartialPage; this.getFull = htmldb_Get_fullReturn; this.get = htmldb_Get_getData; this.url = htmldb_Get_getUrl; this.escape = htmldb_Get_escape; this.clear = htmldb_Get_clear; this.sync = htmldb_Get_sync; this.setNode = setNode; this.replaceNode = replaceNode // // setup the base url // var u = window.location.href.indexOf("?") > 0 ? window.location.href.substring(0,window.location.href.indexOf("?")) : window.location.href; this.base = u.substring(0,u.lastIndexOf("/")); if ( this.proc == null || this.proc == "" ) this.proc = u.substring(u.lastIndexOf("/")+1); this.base = this.base +"/" + this.proc; // // grab the instance form the page form // if ( instance == null || instance == "" ) { var pageInstance = document.getElementById("pInstance"); if ( typeof(pageInstance) == 'object' ) { this.instance = pageInstance.value; } } else { this.instance = instance; } // // finish setiing up the base url and params // if ( ! queryString ) { this.addParam('p_request', this.request) ; this.addParam('p_instance', this.instance); this.addParam('p_flow_id', this.flow); this.addParam('p_flow_step_id',this.page); } function setNode(id) { this.node = html_GetElement(id); } function replaceNode(newNode){ var i=0; for(i=this.node.childNodes.length-1;i>=0;i--){ this.node.removeChild(this.node.childNodes[i]); } this.node.appendChild(newNode); } } function htmldb_Get_sync(s){ this.syncMode=s; } function htmldb_Get_clear(val){ this.addParam('p_clear_cache',val); } // // return the queryString // function htmldb_Get_getUrl(){ return this.queryString == null ? this.base +'?'+ this.params : this.queryString; } function htmldb_Get_escape(val){ // force to be a string val = val + ""; val = val.replace(/\%/g, "%25"); val = val.replace(/\+/g, "%2B"); val = val.replace(/\ /g, "%20"); val = val.replace(/\./g, "%2E"); val = val.replace(/\*/g, "%2A"); val = val.replace(/\?/g, "%3F"); val = val.replace(/\\/g, "%5C"); val = val.replace(/\//g, "%2F"); val = val.replace(/\>/g, "%3E"); val = val.replace(/\</g, "%3C"); val = val.replace(/\{/g, "%7B"); val = val.replace(/\}/g, "%7D"); val = val.replace(/\~/g, "%7E"); val = val.replace(/\[/g, "%5B"); val = val.replace(/\]/g, "%5D"); val = val.replace(/\`/g, "%60"); val = val.replace(/\;/g, "%3B"); val = val.replace(/\?/g, "%3F"); val = val.replace(/\@/g, "%40"); val = val.replace(/\&/g, "%26"); val = val.replace(/\#/g, "%23"); val = val.replace(/\|/g, "%7C"); val = val.replace(/\^/g, "%5E"); val = val.replace(/\:/g, "%3A"); val = val.replace(/\=/g, "%3D"); val = val.replace(/\$/g, "%24"); //val = val.replace(/\"/g, "%22"); return val; } // // Simple function to add name/value pairs to the url // function htmldb_Get_addParam(name,val){ if ( this.params == '' ) this.params = name + '='+ ( val != null ? this.escape(val) : '' ); else //this.params = this.params + '&'+ name + '='+ ( val != null ? val : '' ); this.params = this.params + '&'+ name + '='+ ( val != null ? this.escape(val) : '' ); return; } // // Simple function to add name/value pairs to the url // function htmldb_Get_addItem(name,value){ this.addParam('p_arg_names',name); this.addParam('p_arg_values',value); } // // funtion strips out the PPR sections and returns that // function htmldb_Get_trimPartialPage(startTag,endTag,obj) { setTimeout(html_processing,1); if (obj) {this.obj = $x(obj);} if (!startTag){startTag = '<!--START-->'}; if (!endTag){endTag = '<!--END-->'}; var start = this.response.indexOf(startTag); var part; if ( start >0 ) { this.response = this.response.substring(start+startTag.length); var end = this.response.indexOf(endTag); this.response = this.response.substring(0,end); } if ( this.obj ) { if(this.obj.nodeName == 'INPUT'){ if(document.all){ gResult = this.response; gNode = this.obj; var ie_HACK = 'htmldb_get_WriteResult()'; setTimeout(ie_HACK,100); }else{ this.obj.value = this.response; } }else{ if(document.all){ gResult = this.response; gNode = this.obj; var ie_HACK = 'htmldb_get_WriteResult()'; setTimeout(ie_HACK,100); }else{ this.obj.innerHTML = this.response; } } } //window.status = 'Done' setTimeout(html_Doneprocessing,1); return this.response; } var gResult = null; var gNode = null function htmldb_get_WriteResult(){ if(gNode && ( gNode.nodeName == 'INPUT' || gNode.nodeName == 'TEXTAREA')){ gNode.value = gResult; }else{ gNode.innerHTML = gResult; } gResult = null; gNode = null; return; } // // function return the full response // function htmldb_Get_fullReturn(obj) { setTimeout(html_processing,1); if (obj) { this.obj = html_GetElement(obj);} if ( this.obj ) { if(this.obj.nodeName == 'INPUT'){ this.obj.value = this.response; }else{ if(document.all){ gResult = this.response; gNode = this.obj; var ie_HACK = 'htmldb_get_WriteResult()'; setTimeout(ie_HACK,10); }else{ this.obj.innerHTML = this.response; } } } setTimeout(html_Doneprocessing,1); return this.response; } // // Perform the actual get from the server // function htmldb_Get_getData(mode,startTag,endTag){ html_processing(); var p; try { p = new XMLHttpRequest(); } catch (e) { p = new ActiveXObject("Msxml2.XMLHTTP"); } try { var startTime = new Date(); p.open("POST", this.base, this.syncMode); p.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); p.send(this.queryString == null ? this.params : this.queryString ); this.response = p.responseText; if ( this.node ) this.replaceNode(p.responseXML); if ( mode == null || mode =='PPR' ) { return this.getPartial(startTag,endTag); } if ( mode == "XML" ) { setTimeout(html_Doneprocessing,1); return p.responseXML; } else { return this.getFull(); } } catch (e) { setTimeout(html_Doneprocessing,1); return; } } function html_Doneprocessing(){ document.body.style.cursor="default"; } function html_processing(){ document.body.style.cursor="wait"; } /* this adds better aysnc functionality to the htmldb_Get object pVar is the function that you want to call when the xmlhttp state changes in the function specified by pVar the xmlhttp object can be referenced by the variable p */ htmldb_Get.prototype.GetAsync = function(pVar){ try{ p = new XMLHttpRequest(); }catch(e){ p = new ActiveXObject("Msxml2.XMLHTTP"); } try { var startTime = new Date(); p.open("POST", this.base, true); if(p) { p.onreadystatechange = pVar; p.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); p.send(this.queryString == null ? this.params : this.queryString ); return p; } }catch(e){ return false; } } /* PDF OUTPUT */ /*Gets PDF src XML */ function htmldb_ExternalPost(pThis,pRegion,pPostUrl){ var pURL = 'f?p='+html_GetElement('pFlowId').value+':'+html_GetElement('pFlowStepId').value+':'+html_GetElement('pInstance').value+':FLOW_FOP_OUTPUT_R'+pRegion document.body.innerHTML = document.body.innerHTML + '<div style="display:none;" id="dbaseSecondForm"><form id="xmlFormPost" action="' + pPostUrl + '?ie=.pdf" method="post" target="pdf"><textarea name="vXML" id="vXML" style="width:500px;height:500px;"></textarea></form></div>'; var l_El = html_GetElement('vXML'); var get = new htmldb_Get(l_El,null,null,null,null,'f',pURL.substring(2)); get.get(); get = null; setTimeout('html_GetElement("xmlFormPost").submit()',10); return; } function $xml_Control(pThis){ this.xsl_string = '<?xml version="1.0"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:output method="html"/><xsl:param name="xpath" /><xsl:template match="/"><xsl:copy-of select="//*[@id=$xpath]"/></xsl:template></xsl:stylesheet>'; if(document.all){ this.xsl_object = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.3.0"); this.xsl_object.async=false; this.xsl_object.loadXML(this.xsl_string) tmp = new ActiveXObject("Msxml2.XSLTemplate.3.0"); tmp.stylesheet = this.xsl_object; this.xsl_processor = tmp.createProcessor(); }else{ this.xsl_object = (new DOMParser()).parseFromString(this.xsl_string, "text/xml"); this.xsl_processor = (new XSLTProcessor()); this.xsl_processor.importStylesheet(this.xsl_object); this.ownerDocument = document.implementation.createDocument("", "test", null); } this.xml = pThis; this.CloneAndPlace = _CloneAndPlace; return function _CloneAndPlace(pThis,pThat,pText){ var lThat = $x(pThat); if(document.all){ this.xsl_processor.addParameter("xpath", pThis); this.xsl_processor.input = this.xml; this.xsl_processor.transform; var newFragment = this.xsl_processor.output; }else{ this.xsl_processor.setParameter(null, "xpath", pThis); var newFragment = this.xsl_processor.transformToFragment(this.xml,this.ownerDocument); } if(lThat){ if(document.all){ lThat.innerHTML=''; lThat.innerHTML=newFragment; }else{ lThat.innerHTML=''; lThat.appendChild(newFragment); } /* in IE newFragment will be a string in FF newFragment will be a dome Node (more useful) */ return newFragment; } } } 时,确保它获得一个数组

json_encode
  

注意:我不太了解php,所以这个例子可能是错误的。

现在在javascript中,确保从数组的第一个元素

获取数据
// Encode the message using json
$response = json_encode(array($message));

现在var data = JSON.parse(response)[0]; 准备好以HTML格式添加。

data