我想从PHP脚本返回JSON。
我只是重复结果吗?我必须设置内容类型头吗?
我想从PHP脚本返回JSON。
我只是重复结果吗?我必须设置内容类型头吗?
当前回答
设置访问安全性也很好——只需将*替换为您希望能够访问它的域。
<?php
header('Access-Control-Allow-Origin: *');
header('Content-type: application/json');
$response = array();
$response[0] = array(
'id' => '1',
'value1'=> 'value1',
'value2'=> 'value2'
);
echo json_encode($response);
?>
这里有更多的例子:如何绕过Access-Control-Allow-Origin?
其他回答
根据json_encode的手册,该方法可以返回一个非字符串(false):
成功时返回JSON编码字符串,失败时返回FALSE。
当这种情况发生时,echo json_encode($data)将输出空字符串,这是无效的JSON。
如果json_encode的参数包含一个非UTF-8字符串,则json_encode将失败(并返回false)。
这个错误情况应该在PHP中捕获,例如:
<?php
header("Content-Type: application/json");
// Collect what you need in the $data variable.
$json = json_encode($data);
if ($json === false) {
// Avoid echo of empty string (which is invalid JSON), and
// JSONify the error message instead:
$json = json_encode(["jsonError" => json_last_error_msg()]);
if ($json === false) {
// This should not happen, but we go all the way now:
$json = '{"jsonError":"unknown"}';
}
// Set HTTP response status code to: 500 - Internal Server Error
http_response_code(500);
}
echo $json;
?>
然后,接收端当然应该知道jsonError属性的存在表明了一个错误条件,它应该相应地处理这个错误条件。
在生产模式下,最好只向客户端发送一般的错误状态,并记录更具体的错误消息,以便以后进行调查。
在PHP文档中阅读更多关于处理JSON错误的内容。
如上所述:
header('Content-Type: application/json');
会完成这项工作。但请记住:
即使没有使用这个报头,Ajax读取json也没有问题,除非您的json包含一些HTML标记。在这种情况下,您需要将头文件设置为application/json。 确保您的文件不是用UTF8-BOM编码的。这种格式在文件顶部添加了一个字符,因此header()调用将失败。
这个问题有很多答案,但没有一个涵盖了返回干净JSON的整个过程,以及防止JSON响应变形所需的一切。
/*
* returnJsonHttpResponse
* @param $success: Boolean
* @param $data: Object or Array
*/
function returnJsonHttpResponse($success, $data)
{
// remove any string that could create an invalid JSON
// such as PHP Notice, Warning, logs...
ob_clean();
// this will clean up any previously added headers, to start clean
header_remove();
// Set the content type to JSON and charset
// (charset can be set to something else)
header("Content-type: application/json; charset=utf-8");
// Set your HTTP response code, 2xx = SUCCESS,
// anything else will be error, refer to HTTP documentation
if ($success) {
http_response_code(200);
} else {
http_response_code(500);
}
// encode your PHP Object or Array into a JSON string.
// stdClass or array
echo json_encode($data);
// making sure nothing is added
exit();
}
引用:
response_remove
ob_clean
JSON内容类型
HTTP规范
http_response_code
json_encode
如果你想要js对象,使用头content-type:
<?php
$data = /** whatever you're serializing **/;
header('Content-Type: application/json; charset=utf-8');
echo json_encode($data);
如果你只想要json: remove header content-type属性,只需要encode和echo。
<?php
$data = /** whatever you're serializing **/;
echo json_encode($data);
用header(' content -type: application/json')设置内容类型;然后对数据进行回显。