2012-07-08 78 views
1

我有一個標準的JavaScript AJAX調用,我設置的數據:到JSON數據。JS Ajax調用PHP並獲取Ajax調用數據

$.ajax({ 
    type: "POST", 
    url: BaseUrl + "User/Login",  
    //url: BaseUrl + "User/Limit/1/2", 
    data: '{"apiKey":"c7089786-7e3a-462c-a620-d85031f0c826","appIDGiven":"200","userName":"matt2","password":"pass"}', 
    success: function(data){ 
     console.log(data); 
    }, 
    error: function(request){ 
     console.log(request); 
    }, 
}); 

我正試圖獲取php $_POST["data"]中的數據,這是行不通的。
但是,data: 'test={"apiKey":"c7089786-7e3a-462c-a620-d85031f0c826","appIDGiven":"200","userName":"matt2","password":"pass"}'的作品。

我想知道是否它可能是我的框架或類似的東西阻止$_POST["data"]工作或這是不可能的?還是有什麼我可以用來獲得這些數據?

編輯:

所以框架YII和延伸Restfullyii有一個方法來獲得它使用一條線 返回json_decode(的file_get_contents( 「PHP://輸入」),真)數據;

這是獲取所有的數據,而不需要數據=或{數據:但它似乎是返回一個數組,因此Im訪問我的屬性,如$ data [「userName」]其中一個真正的JSON對象應該是$數據 - > [ 「的userName」]。糾正我,如果我錯了任何這我在這種情況下得到數組,因爲我真的發送一個JSON字符串?與json對象?

EDIT X2:

所以PHP是使它成爲一個ASSOC陣列,因爲它是真正的發送到json_decode ..

回答

3

我覺得你的代碼的問題是在你設置data: '{....}'行。
它應該是JSON格式,以便正確地傳遞(儘管它也可以是字符串格式,但你需要分析它在服務器端)

下面的代碼應該工作的權利:

$.ajax({ 
    type: "post", 
    url: BaseUrl + "User/Login", 
    data: {"apiKey":"c7089786-7e3a-462c-a620-d85031f0c826","appIDGiven":"200","userName":"matt2","password":"pass"}, 
    success: function(data){ 
     console.log(data); 
    }, 
    error: function(request){ 
     console.log(request); 
    } 
}); 

在服務器端嘗試:$_POST['apiKey']$_POST['appIDGiven']等等。

+0

我不確定,但我認爲數據總是作爲字符串發送到服務器。 – MrB 2012-07-09 16:15:54

+0

@MrB是的,最後我認爲它是作爲字符串發送的,但服務器/客戶端的解釋是不同的。 – tftd 2012-07-10 10:49:21

1

data選項必須是object串行(例如"name1=value1&name2=value2")string.So你需要通過這樣的:

data: /*object*/{data:'{"apiKey":"c7089786-7e3a-462c-a620-d85031f0c826","appIDGiven":"200","userName":"matt2","password":"pass"}'}, 
       // ^-----this is added for $_POST["data"] 

或類似:

data: /*serialized string*/'data={"apiKey":"c7089786-7e3a-462c-a620-d85031f0c826","appIDGiven":"200","userName":"matt2","password":"pass"}', 
          // ^-----this is added for $_POST["data"] 
0

首先,發送的數據必須是JSON對象而不是字符串。刪除引號。

此外,在服務器端,您可以更好解碼輸入$_POST['data']json_decode()(見documentaion