gpt4 book ai didi

javascript - 使用流水线的服务器端处理

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:20:30 26 4
gpt4 key购买 nike

默认情况下,此函数适用于 $_GET。基于on this discussion我修改了this function得到类似下面的东西。现在的问题是,Firebug 给出了错误信息

json.aaData is undefined @ line 99

这是一行(位于代码末尾):

json.aaData.splice( 0, iRequestStart-oCache.iCacheLower ); 

PHP 端响应,并且此表在没有流水线操作的情况下 100% 工作。但是当我启用流水线时出现此错误:

http://screencast.com/t/GOJzPHq3kg

function fnDataTablesPipeline ( sSource, aoData, fnCallback ) {
var iPipe = 5; /* Ajust the pipe size */

var bNeedServer = false;
var sEcho = fnGetKey(aoData, "sEcho");
var iRequestStart = fnGetKey(aoData, "iDisplayStart");
var iRequestLength = fnGetKey(aoData, "iDisplayLength");
var iRequestEnd = iRequestStart + iRequestLength;
oCache.iDisplayStart = iRequestStart;

/* outside pipeline? */
if ( oCache.iCacheLower < 0 || iRequestStart < oCache.iCacheLower || iRequestEnd > oCache.iCacheUpper )
{
bNeedServer = true;
}

/* sorting etc changed? */
if ( oCache.lastRequest && !bNeedServer )
{
for( var i=0, iLen=aoData.length ; i<iLen ; i++ )
{
if ( aoData[i].name != "iDisplayStart" && aoData[i].name != "iDisplayLength" && aoData[i].name != "sEcho" )
{
if ( aoData[i].value != oCache.lastRequest[i].value )
{
bNeedServer = true;
break;
}
}
}
}

/* Store the request for checking next time around */
oCache.lastRequest = aoData.slice();

if ( bNeedServer )
{
if ( iRequestStart < oCache.iCacheLower )
{
iRequestStart = iRequestStart - (iRequestLength*(iPipe-1));
if ( iRequestStart < 0 )
{
iRequestStart = 0;
}
}

oCache.iCacheLower = iRequestStart;
oCache.iCacheUpper = iRequestStart + (iRequestLength * iPipe);
oCache.iDisplayLength = fnGetKey( aoData, "iDisplayLength" );
fnSetKey( aoData, "iDisplayStart", iRequestStart );
fnSetKey( aoData, "iDisplayLength", iRequestLength*iPipe );

jQuery.post( sSource, aoData, function (data) {
/* Callback processing */
oCache.lastJson = jQuery.extend(true, {}, data);

if ( oCache.iCacheLower != oCache.iDisplayStart )
{
data.aaData.splice( 0, oCache.iDisplayStart-oCache.iCacheLower );
}
data.aaData.splice( oCache.iDisplayLength, data.aaData.length );

fnCallback(data)
},"json" );
}
else
{
json = jQuery.extend(true, {}, oCache.lastJson);
json.sEcho = sEcho; /* Update the echo for each response */
json.aaData.splice( 0, iRequestStart-oCache.iCacheLower ); // <- this line
json.aaData.splice( iRequestLength, json.aaData.length );
fnCallback(json);
return;
}
}

我错过了什么?有什么建议吗?

最佳答案

jsonfnDataTablesPipeline() 中从 oCache.lastJson 获取其属性,但前提是 bNeedServer 是真的。

如果 fnDataTablesPipeline() 从未被调用或已被调用但 bNeedServer 仍然为 false,则行 oCache.lastJson = jQuery.extend(true, {}, data); 将不会被执行并且 json.aaData.splice() 将失败。

您需要处理 oCache.lastJson 未填充(或仅部分填充)的情况:

  • 通过使用默认属性初始化 oCache.lastJson
  • 通过在尝试使用属性并采取相应行动之前测试其是否存在,

例如:

else{
if(oCache.lastJson.aaData) {
json = jQuery.extend(true, {}, oCache.lastJson);
json.sEcho = sEcho; /* Update the echo for each response */
json.aaData.splice( 0, iRequestStart-oCache.iCacheLower );
json.aaData.splice( iRequestLength, json.aaData.length );
fnCallback(json);
}
}

我无法判断这是否 100% 正确。您可能需要在 if 子句中放置更少的内容,例如,只抑制以 json.aaData.splice... 开头的两行可能是合适的。

关于javascript - 使用流水线的服务器端处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10542041/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com