为什么以前使用json_encode响应时使用wp_send_json()解决了我的问题?

时间:2019-07-18 18:50:25

标签: php json wordpress jsonencoder

我写了一个PHP类来处理CSV文件并上传条目。文件中的最后一轮超过15,000多行。

以前,在包装器中,我将像这样返回json响应:

echo json_encode($jsonResponse);
wp_die();

当我们上传具有多达2,000行的文件时,效果很好。最近,我们上传了一个文件,该文件具有4,000多行,并且json响应永远不会打印-response将是NULL。在检查了文件本身是否是导致问题的许多小时之后,我选择使用以下

wp_send_json($jsonResponse);

我的回复将按预期显示在屏幕上。我研究了wp_send_json()方法,并了解它是WP的预期用法。我的问题是,为什么以前的实现至今仍有效?我假设通过手动json_encode()运行的响应太大了?

我正在寻找有关问题根源的见解,以及对我的解决方案为何起作用的更深刻理解。

1 个答案:

答案 0 :(得分:0)

我假设在您的情况下,json_encode()返回布尔值falsejson_encode()从不返回null,它在错误时返回字符串或false。当然,它可以返回字符串“ null”,但绝不能返回“ NULL”。

您的数据很可能包含一些二进制数据(例如损坏的UTF-8),有效的JSON不能包含这些二进制数据。您可以通过在json_last_error_msg()之后调用json_encode()来检查实际的错误消息。

wp_send_json()对您的数据执行一些清理操作,使其可以json编码。但是,尽管它确实产生了一些不错的JSON输出,但由于清理过程会修改数据,因此数据实际上“被破坏了”(无论是否明显)。