JS Ajax调用PHP并获取ajax调用数据

时间:2012-07-08 18:43:05

标签: php javascript ajax

我有一个标准的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- > [ “的userName”]。纠正我,如果我错了任何这个我在这种情况下得到数组,因为我真的发送一个json字符串?与一个json对象?

编辑x2:

所以php正在使它成为一个关联数组,因为它发送的是真实的json_decode ..

3 个答案:

答案 0 :(得分: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'],依此类推。

答案 1 :(得分: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"]

答案 2 :(得分:0)

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

此外,在您的服务器端,您最好解码输入$_POST['data'] json_decode() (请参阅documentaion