Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中通过回声从AJAX返回数据_Php_Ajax_Json - Fatal编程技术网

在PHP中通过回声从AJAX返回数据

在PHP中通过回声从AJAX返回数据,php,ajax,json,Php,Ajax,Json,我刚刚开始用PHP编写代码。我以前在asp.net工作过。在donetwebmethod中,将数据整齐地返回到AJAX调用。尝试使用PHP时,我发现您最多只能echo返回想要返回的数据 如果我在服务器上将数据转换为JSON,然后返回,则不确定PHP是否会将错误消息编码到其中。这会在客户端代码中创建无效的JSON,并且无法解析结果 所以我想知道,即使发生错误,我是否可以做一些高级的事情,以便始终从服务器整洁地返回 澄清:首先出现错误时,不可能在客户端上从JSON解码。事实上,这就是问题所在。是的,

我刚刚开始用PHP编写代码。我以前在asp.net工作过。在donet
webmethod
中,将数据整齐地返回到AJAX调用。尝试使用PHP时,我发现您最多只能
echo
返回想要返回的数据

如果我在服务器上将数据转换为JSON,然后返回,则不确定PHP是否会将错误消息编码到其中。这会在客户端代码中创建无效的JSON,并且无法解析结果

所以我想知道,即使发生错误,我是否可以做一些高级的事情,以便始终从服务器整洁地返回


澄清:首先出现错误时,不可能在客户端上从JSON解码。事实上,这就是问题所在。

是的,您可以从php以json数据结构回送数据。下面是一个例子

PHP

$data = array( 'name' => 'David' , 'age' => '25' );
header('Content-Type: application/json');
echo json_encode($data); //Convert array to json string
Javascript(客户端)


这个问题的基础似乎是服务器上的一个未处理的异常,它将使用无效字符串打乱JSON输出(或者,如果错误报告按应有的方式关闭,JSON输出将未完成,因此仍然无效)

考虑以下AJAX代码:

function getPost()
{
    return riskyOperation(); // throws \PDOException
}

echo json_encode(getPost());
这显然会在发生数据库错误时导致问题。要修复它,您可以执行以下操作:

function getPost()
{
    try
    {
        $post = riskyOperation(); // throws \PDOException
    }
    catch (\PDOException $e)
    {
        // @todo Log the exception here
        $post = ['error' => 'A database error occurred', ];
    }

    return $post;
}

echo json_encode(getPost());
请注意,在这种情况下,我没有向客户端发送错误消息(在
$e->getMessage()
中),因为有关数据库的技术错误不适合用户,可能有助于破解尝试


此外,也值得进行防御性编程——与其运行可能引发错误的代码,还不如在运行该代码之前进行检查,这样可以避免错误而不是捕获错误。

我的问题有什么错???@Cristik不清楚我想返回json数据。。当php中出现错误时,您就会遇到麻烦,因为该错误会干扰json的端编码。我认为我的问题很清楚……如果您在服务器上收到错误,您需要捕获该错误并返回一个JSON响应,该响应以适合您的应用程序的方式描述错误情况。这里什么是合适的取决于您的错误是什么以及您希望应用程序如何处理它。您遇到的实际错误是什么?@halfer谢谢您将我的问题减半。。。我想这就是答案。。我应该正确处理服务器上的错误。。谢谢您可以将其作为答案..现在假设您在服务器上遇到错误。。然后???服务器将尝试向您发送错误消息,并尝试将其发送到客户端,客户端上的解码将变得混乱..Json数据将自动解码到Json对象中,如果您添加数据类型:Json,我将更新上面的代码,这非常酷!!!!!我的问题需要支持。因为它不值得被否决。@不管怎样,很高兴这是有帮助的。我们倾向于不鼓励在这里要求投票——值得支持的问题会及时得到支持。也许一个小的代码示例有助于澄清您要查找的内容。我还删去了“请仔细阅读问题”,因为这可能会让你获得更多的反对票。简言之,不要担心DVs,下次用它们来鼓励你问一个更详细的问题。太好了!!!!谢谢!!!如果有更多像你这样的人,不仅如此,整个世界都会变得更美好。:)哈哈,谢谢@which
:-)
function getPost()
{
    try
    {
        $post = riskyOperation(); // throws \PDOException
    }
    catch (\PDOException $e)
    {
        // @todo Log the exception here
        $post = ['error' => 'A database error occurred', ];
    }

    return $post;
}

echo json_encode(getPost());