我有一个标准的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 ..
答案 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 )