使用 AJAX、Slim 和 PHP 时未获取 JSON 数据
Not getting JSON data when using AJAX, Slim and PHP
我正在学习使用 Slim 创建 Rest API,但卡在了这里。我尝试了互联网上提到的许多东西,但仍然没有价值。
我的Ajax:
$.ajax({
type: 'POST',
url: 'pages/search',
dataType: "json",
data: {'val1':value1,'val2':value2},
success: function(data){
alert(data.val1);
}
});
我的 PHP 使用 Slim:
<?php
require 'Slim/Slim.php';
$app = new Slim();
$app->post('/search','getValue');
$app->run();
function getValue(){
$request = Slim::getInstance()->request();
$values= json_decode($request->getBody());
$value1 = $values->val1; // Throwing error here - Slim Application Error
$value2 = $values->val2;
echo "{'val1':'".$value1."'}";
}
?>
您正在尝试读取 JSON 格式的请求:
$values= json_decode($request->getBody());
然后输出 invalid JSON 作为响应(可能使用默认 Content-Type: text/html
响应 header)。
但是您传递给 jQuery 的 data
一个普通的 object 所以您正在制作一个标准的 形式编码 请求:
data: {'val1':value1,'val2':value2},
并且您正在强制 jQuery 将响应视为 JSON(事实并非如此):
dataType: "json",
假设您要发出 JSON 请求并以 JSON 响应,您需要:
正确格式化请求:
data: JSON.stringify( { val1: value1, val2: value2} ),
contentType: "application/json",
正确输出响应:
header("Content-Type: application/json");
echo json_encode( array( "val1" => $value1 ) );
(注意:我不知道您使用的是什么 PHP 框架。header 函数可能不是处理其中设置响应 header 的正确方法) .
我正在学习使用 Slim 创建 Rest API,但卡在了这里。我尝试了互联网上提到的许多东西,但仍然没有价值。
我的Ajax:
$.ajax({
type: 'POST',
url: 'pages/search',
dataType: "json",
data: {'val1':value1,'val2':value2},
success: function(data){
alert(data.val1);
}
});
我的 PHP 使用 Slim:
<?php
require 'Slim/Slim.php';
$app = new Slim();
$app->post('/search','getValue');
$app->run();
function getValue(){
$request = Slim::getInstance()->request();
$values= json_decode($request->getBody());
$value1 = $values->val1; // Throwing error here - Slim Application Error
$value2 = $values->val2;
echo "{'val1':'".$value1."'}";
}
?>
您正在尝试读取 JSON 格式的请求:
$values= json_decode($request->getBody());
然后输出 invalid JSON 作为响应(可能使用默认 Content-Type: text/html
响应 header)。
但是您传递给 jQuery 的 data
一个普通的 object 所以您正在制作一个标准的 形式编码 请求:
data: {'val1':value1,'val2':value2},
并且您正在强制 jQuery 将响应视为 JSON(事实并非如此):
dataType: "json",
假设您要发出 JSON 请求并以 JSON 响应,您需要:
正确格式化请求:
data: JSON.stringify( { val1: value1, val2: value2} ),
contentType: "application/json",
正确输出响应:
header("Content-Type: application/json");
echo json_encode( array( "val1" => $value1 ) );
(注意:我不知道您使用的是什么 PHP 框架。header 函数可能不是处理其中设置响应 header 的正确方法) .