📜  php json 对 ajax 的响应 - PHP (1)

📅  最后修改于: 2023-12-03 15:18:20.303000             🧑  作者: Mango

PHP中使用JSON响应Ajax请求

当我们在使用Ajax发送请求时,通常会期望服务器响应JSON格式的数据,PHP中提供了很多方式来将数据编码为JSON格式并响应给前端。

使用json_encode()函数

我们可以使用PHP内置的json_encode()函数将一个PHP数组或对象编码为JSON格式的字符串。

$data = array('name' => 'John', 'age' => 30, 'city' => 'New York');
echo json_encode($data);

上述代码将会输出以下JSON格式的字符串:

{"name":"John","age":30,"city":"New York"}

我们可以直接将上述语句放到服务器响应脚本里,将JSON格式的字符串作为响应体返回给前端。

设置响应头

在服务器响应JSON数据时,比较重要的一步是设置响应头。我们通常会设置Content-Type响应头为application/json,以告诉浏览器接收到的是JSON数据。可以使用PHP内置的header()函数来设置响应头。

header('Content-Type: application/json');

我们通常将上述语句放到服务器响应脚本的开头,确保在响应体输出之前设置好响应头。

响应JSON数据

完成上述两个步骤后,我们就可以将JSON数据作为响应体返回给前端了。以下是一个完整的响应示例:

header('Content-Type: application/json');

$data = array('name' => 'John', 'age' => 30, 'city' => 'New York');
echo json_encode($data);

需要注意的是,我们需要在服务器端使用echo语句输出JSON数据,这是因为我们在设置响应头之后,浏览器会默认使用“接收文本”方式处理响应体,而不是“接收XML”或“接收JSON”方式。

处理请求数据

在一些情况下,我们也需要处理前端发送过来的JSON数据,通常情况下,我们可以使用json_decode()函数将JSON格式的数据解码为PHP数组或对象。

$json_str = file_get_contents('php://input');
$data = json_decode($json_str, true);

上述代码中,我们从php://input读取请求参数,并使用json_decode()函数将其解码为PHP数组。我们可以通过第二个参数设置输出格式为数组还是对象(默认为对象)。

完整示例

以下是一个完整的Ajax响应示例,它从请求参数中读取一个整数,将其乘以两倍并作为JSON数据响应给前端。这些代码应该保存在服务器端PHP文件中。

header('Content-Type: application/json');

$json_str = file_get_contents('php://input');
$data = json_decode($json_str, true);

if (isset($data['num'])) {
    $num = $data['num'];
    $result = $num * 2;
    echo json_encode(array('result' => $result));
} else {
    echo json_encode(array('error' => 'Missing parameter num'));
}

在前端使用Ajax发送请求,并处理响应:

$.ajax({
    url: '/path/to/server.php',
    method: 'POST',
    data: JSON.stringify({num: 4}),
    dataType: 'json',
    contentType: 'application/json',
    success: function(data) {
        console.log(data.result);    // 输出8
    },
    error: function(xhr, status, error) {
        console.error(xhr.responseText);
    }
});