【问题标题】:JS Ajax calling PHP and getting ajax call dataJS Ajax调用PHP并获取ajax调用数据
【发布时间】:2012-07-08 07:08:35
【问题描述】:

我有一个标准的 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 有一种方法可以使用一行来获取它正在使用的数据 返回 json_decode(file_get_contents("php://input"), true);

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

编辑 x2:

所以 php 将其设为 assoc 数组,因为它向 json_decode 发送 true ..

【问题讨论】:

    标签: php javascript ajax


    【解决方案1】:

    我认为您的代码的问题在于您设置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'] 等等。

    【讨论】:

    • 我不确定,但我认为数据总是作为字符串发送到服务器。
    • @MrB 最后是的,我认为它是作为字符串发送的,但服务器/客户端的解释不同。
    【解决方案2】:

    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"]
    

    【讨论】:

      【解决方案3】:

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

      另外,在你的服务器端,你最好解码输入$_POST['data']json_decode()(见documentaion

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多