使用 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 的正确方法) .