我正在学习使用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."'}";
}
?>
答案 0 :(得分:3)
您正在尝试阅读JSON格式的请求:
$values= json_decode($request->getBody());
然后输出无效 JSON作为响应(可能使用默认的Content-Type: text/html
响应标头)。
但是你传递jQuery&#39; data
一个简单的对象,所以你要做一个标准的表单编码请求:
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框架。标头功能可能不是处理设置响应标头的正确方法。)