php - Ajax + JSON解码+ Slim PHP问题?

原文 标签 php javascript ajax json zepto

好的,我似乎无法从ajax调用中解码JSON,该调用将用户数据发布到我的api(内置于slim php中)中。

这是我的ajax

var jsonData;
jsonData = [
      {
        username: "user",
        password: "pass"
      }
    ];

$.ajax({
  type: "POST",
  url: "http://localhost/api/user/auth",
  data: {
    user: JSON.stringify(jsonData)
  },
  contentType: "application/json; charset=utf-8",
  dataType: "json",
  success: function(data) {
    alert("You are good!");
  },
  error: function(xhr, type) {
    alert("Y U NO WORK?");
  }
});

这是我的SLIM PHP代码。
$app->post('/user/auth', function () use ($app) {
    try {
         $requestBody = $app->request()->getBody(); //This works

         //RequestBody is: user=%5B%7B%22username%22%3A%22user%22%2C%22password%22%3A%22pass%22%7D%5D         

         $json_a = json_decode($requestBody); //This doesn't work

         print_r($json_a); //Has no output?

         $username = $json_a['user']['username']; //Therefore this doesn't work?

    } catch(Exception $e) {
         echo '{"error":{"text": "'. $e->getMessage() .'"}}';
    }
});

正如您在代码中编写的注释中所看到的,requestBody等于:
user=%5B%7B%22username%22%3A%22user%22%2C%22password%22%3A%22pass%22%7D%5D  

但是,我似乎无法对其进行解码,因为print_r($ json_a)无效。

非常感谢任何帮助,谢谢。

最佳答案

尝试

$params_str = urldecode($requestBody);
parse_str($params_str, $params_arr);
$user = json_decode($params_arr['user']);

相关文章:

javascript - “blob:http:……”是什么?以及如何将其保存到文件中?

javascript - 分别设置倒计时计时器的javascript输出样式

javascript - 使用Ajax提取JSON数据时,出现意外 token :错误

php - 在php中保存图像的字节数组

php - 如果验证不失败,则提交数据(PHP,MYSQL)

php - 从可靠的系统源自动检测时区

javascript - 是否应该通过AngularFirestoreCollection对AngularFire中的Firstore项目进行更新?

javascript - 带引导的页面可滚动部分

javascript - Master Page.Page Load()中的RegisterStartupScript将不会在ContentPlaceHolder中的异步回发中运行

php - 使用AJAX将Wordpress帖子内容加载到DIV中