1

我有一个标准的 javascript ajax 调用,我在其中设置数据:到 json 数据。

$.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 有一种方法来获取它正在使用的数据,使用一行 return json_decode(file_get_contents("php://input"), true);

这是获取所有数据而不需要 data= 或 {data: 但是它似乎正在返回一个数组,所以我访问我的属性,如 $data["userName"] ,其中真正的 json 对象应该是 $data->["用户名”]。如果我在这方面有任何错误,请纠正我在这种情况下我得到数组是因为我真的在发送一个 json 字符串吗?与 json 对象相比?

编辑 x2:

所以 php 使它成为一个 assoc 数组,因为它发送 true 到 json_decode..

4

3 回答 3

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']等等。

于 2012-07-08T19:15:09.507 回答
1

data选项必须是一个object序列化(例如"name1=value1&name2=value2")字符串。所以你需要像这样传递:

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"]
于 2012-07-08T18:45:26.073 回答
0

首先,发送的数据必须是JSON 对象而不是字符串。删除引号。

此外,在您的服务器端,您将更好地解码输入$_POST['data']json_decode()请参阅文档

于 2012-07-08T18:57:31.030 回答