2016-02-05 60 views
1

我只是做一個簡單的職位,但由於某種原因,不管我做什麼,我不能讀取JSON數據苗條框架發送和recieving JSON

$.ajax({ 
     url: 'server/account/session', 
     type: 'POST', 
     data: { "username": name, "password": password} , 
     contentType: 'application/json; charset=utf-8', 
     dataType: "json", 
     success: function (data) { 
      sessionStorage.accessToken = data["token"]; 
      sessionStorage.userid = data["userid"]; 
      alert (sessionStorage.accessToken); 
     }, 


     error: function() { 

     } 
    }); 

data: {"username": "chips", "password": "potato"}

我的PHP:

$result = json_decode($app->request->getBody(), true); 
var_dump($result); 

會導致NULL。我不明白爲什麼它會返回NULL,我發送了一個JSON,然後在PHP解碼成一個。數組,我不知道我在做什麼?

問題二: 2)一個相關的問題:

如果我是通過 $userid = $app->request->params('username');

它完美的作品通過jquery.post

  jQuery.post("server/account/session", { "username": name, "password": password}, function(data){ 
       var result = JSON.parse(data); 

       sessionStorage.accessToken = result["token"]; 
       sessionStorage.userid = result["userid"]; 

       alert (sessionStorage.accessToken); 
      }); 

發送和接受她在PHP,但我的問題是,我認爲當我們做POST時,數據通過Body而不是頭部發送。當我做jquery.post時,我可以通過應用程序的請求來接收它 - > params

編輯:

好的我解決了這個問題。即使您將內容類型指定爲Json,結果也一樣。這並不意味着它會將數據轉換爲JSON。我必須對數據執行JSON.stringify。

但任何人都可以幫我解決第二個問題嗎?

+3

當你說,「我得到一個錯誤」你得到什麼樣的錯誤? – dgig

+0

500內部服務器錯誤。我用螢火蟲檢查,並給了我很長的迴應,但我認爲關鍵是「非法字符串偏移'用戶名'」我應該在這裏粘貼整個事情? – user308553

+1

對於第二個問題,我認爲這就是SLIM的工作方式。這是易用性的一部分,該請求對象包含POST或GET數據,而無需擔心太多。有點像PHP的$ _REQUEST變量。 – dgig

回答

0

對問題2的回答;你不必JSON.stringify()在所有的,當你使用正確的方法:

var data = { 
    username: user, 
    password: pass 
}; 
$.ajax({ 
    dataType: 'json', 
    method: 'POST', 
    url: 'server/account/session', 
    data: data, 
    success: function (data) { 
     console.log(data); 
    } 
}) 
.always(function() { 
    $('body') 
    .removeClass('loading'); 
}); 

這應該產生一個合適的JSON請求這將是由PHP在一般的自動解析到_POST,$ _REQUEST Slim也可以理解。