使用AJAX,Slim和PHP时没有获得JSON数据

时间:2015-05-11 12:24:56

标签: php api slim

我正在学习使用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."'}";

}

?>

1 个答案:

答案 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框架。标头功能可能不是处理设置响应标头的正确方法。)