php如何给客户端返回参数,返回给客户端时,PHP中的服务器端对象为空

我有一个服务器端PHP脚本,用于生成一个包含数据库聚合数据的对象。该脚本构建对象,将其编码为JSON并将其返回给客户端,其中原始请求由此jQuery.ajax调用完成:

$.ajax({

async: false,

url: 'scripts/getDataforUser.php?firstName=' + _firstName+ '&lastName=' + _lastName,

dataType: "json",

success: function(result) {

//Do stuff with 'result' object

//result object sometimes comes back empty

},

error:function (xhr, ajaxOptions, thrownError){

displayError('An error occurred while fetching data');

return;

}

});我的问题是,我偶尔会得到一个返回的空结果对象,这似乎发生在更大的请求中,但看起来是随机的,所以追踪原因一直是一个挑战。我将Zend Server和Eclipse一起用作IDE,我已经多次调试脚本以确认A)存在数据,并且B)使用PHP侧的json_encode($data, JSON_FORCE_OBJECT)将结果对象正确编码为JSON。

同样,这个错误似乎只发生在较大的对象上,因为我可以直接调试getDataforUser.php脚本时看到数据,所以我专注于客户端并查看是否在Javascript端收到错误。

在这一点上,我不确定从服务器到客户端的翻译会有什么损失。我是如何编码PHP中的对象的JSON的问题?我如何调用服务器来获取该编码对象?两者的结合?还是有更重要的东西我失踪了?

更新:

嗨Ben,正如我的评论所述,我忽略了一个细节,在我的原始文章中可能会提供一些有关该问题的见解,是一位在其本地开发人员服务器上运行相同URL的同伴获得返回的空对象,而我只需获得一个空属性的对象。我们的本地服务器的PHP配置是否会成为问题?在我的PHP.ini文件中,我对资源限制有以下设置,在这种情况下,我预计这将足够多。

;;;;;;;;;;;;;;;;;;;

; Resource Limits ;

;;;;;;;;;;;;;;;;;;;

max_execution_time = 600 ; Maximum execution time of each script, in seconds

max_input_time = 180 ; Maximum amount of time each script may spend parsing request data

memory_limit = 128M ; Maximum amount of memory a script may consume (128MB)从直接调试脚本开始,脚本执行此查询所用的时间不超过600秒。它在时间限制内很好地解析了请求数据,并且没有发生关于内存耗尽的错误。

更新2:

我的开发环境正在运行Apache Web服务器。

更新3:

@Ben - 我快速浏览了Apache core documentation,Timeout指令的默认值是300秒,但正如我上面提到的,我使用Zend Server CE作为我的开发服务器(它位于Apache之上),所以它可能有它的拥有默认的Timeout指令,它在其内部的Apache配置中设置。再次,我必须检查。

也只是为了澄清,我的这个软件项目的合作伙伴有同样的问题,只是而不是回收一个空的对象,他回到空。

更新4:

好的,我在本地Web服务器上进行了大量测试和验证。与之相关的一个细节是我查询的数据库托管在MS SQL Server上,我将SQL Server Native Client PHP Driver用作我的数据库抽象层。无论如何,在查看日志之后,我发现SQL Native Client报告了以下情况,数据查询超时:

[0] => Array

(

[0] => 08S01

[SQLSTATE] => 08S01

[1] => 258

[code] => 258

[2] => [Microsoft][SQL Server Native Client 11.0]TCP Provider: Timeout error [258].

[message] => [Microsoft][SQL Server Native Client 11.0]TCP Provider: Timeout error [258].

)

[1] => Array

(

[0] => 08S01

[SQLSTATE] => 08S01

[1] => 258

[code] => 258

[2] => [Microsoft][SQL Server Native Client 11.0]Communication link failure

[message] => [Microsoft][SQL Server Native Client 11.0]Communication link failure

)

[2] => Array

(

[0] => 08S01

[SQLSTATE] => 08S01

[1] => -2147467259

[code] => -2147467259

[2] => [Microsoft][SQL Server Native Client 11.0]Communication link failure

[message] => [Microsoft][SQL Server Native Client 11.0]Communication link failure

)这似乎是结果对象中空数据的主要来源,我仍在搜索有关此错误的信息,我不确定是否需要更新的超时设置位于SQL Server Native Client本身中或位于数据库。需要更多的调查。

更新5:

我排除了数据库超时,远程连接超时设置设置为600秒。我在网上阅读过使用PDO ODBC驱动程序是首选的,因为超时似乎没有问题。我要试一下,看看它是否解决了这个超时问题。

最终更新分辨率:

好的,所以切换到PDO驱动程序似乎解决了我的超时问题,我验证了在本地开发机器和分段服务器上工作的PDO驱动程序。我仍然不确定在使用SQLSRV驱动程序时会导致SQL Server Native Client超时。现在我会将主要问题标记为已解决,因为我现在正在取回数据。感谢Ben D和其他人的支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值