2012-07-08 49 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