我刚开始用PHP编码。我以前在asp.net工作过。在do net webmethod
中,您可以将数据整齐地返回给AJAX调用。试用PHP我发现你最多只能echo
你想要返回的数据。
如果我在服务器上将数据转换为JSON然后返回,则不确定PHP是否会将错误消息编码到其中。这会在客户端代码中创建无效的JSON,并且无法解析结果。
所以我想知道是否有一些先进的功能,即使出现错误,我也可以从服务器上整齐地返回?
澄清:首先发生错误时,无法从JSON对客户端进行解码。实际上这就是问题。
答案 0 :(得分:1)
这个问题的基础似乎是服务器上的未处理异常,这将使用无效字符串扰乱您的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()
中),因为有关数据库的技术错误不适合用户,并且可能有助于破解尝试。
此外,值得进行防御性编程 - 而不是运行可能引发错误的代码,通常可以在运行该代码之前进行检查,以便可以避免错误而不是捕获错误。 / p>
答案 1 :(得分:0)
是的,您可以从php回显json数据结构中的数据。这是示例
<强> PHP 强>
$data = array( 'name' => 'David' , 'age' => '25' );
header('Content-Type: application/json');
echo json_encode($data); //Convert array to json string
Javascript(客户端)
var data = { 'var' : '123' }; // Some data if you want to send to server
$.ajax({
url: "PATH_TO_PHP_FILE",
data : data,
dataType: "json",
success: function(json){
var response=jQuery.parseJSON(json);
if(typeof response =='object') {
alert(json.name);
alert(json.age);
} else {
echo "Not valid json object";
}
}
});