如何在PHP中读取XmlHttpRequest PUT请求的值

时间:2013-07-05 00:17:05

标签: php javascript ajax

这个想法是通过像这样的PUT请求发送一个来源:

    var oData = new FormData(document.getElementById("editPostForm"));

    var oReq = new XMLHttpRequest();
    oReq.open("PUT", "http://localhost/cms1/api2.php?type=post", true);
    oReq.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    oReq.onload = function(oEvent) {
        if (oReq.status == 200) {
            //postSaved();
            console.log(oReq.responseText);
        } else {
            console.log("Error " + oReq.status + " occurred uploading your file.<br \/>");
        }
    };

    oReq.send(oData);

这似乎有效。接下来的部分就是在服务器端捕获oData。

    switch($_SERVER['REQUEST_METHOD']):
        case "PUT":
        header('HTTP/1.1 201 Created');
        global $data;
        parse_str(file_get_contents("php://input"),$post_vars);
            switch($_GET['type']):
                case "post":
                    //$data['post'] = $post->editPost($post_vars);
                    break;
                case "comment":
                    //$data['comment'] = $comment->editComment($post_vars);
                    break;
            endswitch;
        //echo json_encode($data);
        echo json_encode($post_vars);//used for testing right now
        exit();
        break;
    endswitch;

出于测试目的,我json_encoded $ post_vars,它在chrome控制台中提供了以下输出:

Array
(
[------WebKitFormBoundaryRyXIibrT3VkbWXMz
Content-Disposition:_form-data;_name] => "post_id"
52

------WebKitFormBoundaryRyXIibrT3VkbWXMz
Content-Disposition: form-data; name="post_type"
car stolen

------WebKitFormBoundaryRyXIibrT3VkbWXMz
Content-Disposition: form-data; name="post_location"
somnsomnsomn

------WebKitFormBoundaryRyXIibrT3VkbWXMz
Content-Disposition: form-data; name="upload"; filename=""
Content-Type: application/octet-stream


------WebKitFormBoundaryRyXIibrT3VkbWXMz
Content-Disposition: form-data; name="post_message"


<p>cant figure this out</p>
------WebKitFormBoundaryRyXIibrT3VkbWXMz--

)

问题是,当我想得到像$ post_vars ['post_id']这样的数组的值时,我得到以下错误

<b>Notice</b>:  Undefined index: post_id in <b>G:\server\htdocs\cms1\api2.php</b> on line <b>67</b>

我不知道这是因为FormDataObject,还是我创建XMLHTTPRequest的方式,甚至我的(某种)api正在处理请求。

我的问题是:

  • 是否有办法以某种方式制作XMLHTTPRequest,以便我可以使用键从php中获取数组中的值(如$ post_vars ['key'])
  • 如果没有这种方式,我如何从$ post_vars数组中获取值?

当我使用“GET”或“POST”请求或使用卷发时,我没有遇到任何问题。

如果有人有更好的主意,我会对此持开放态度。 jQuery ajax不接受formData,jquery.ajax.plugin使用我正在使用的相同FormdataObject方法,所以请不要只发布jQuery并逃离场景......

1 个答案:

答案 0 :(得分:0)

而不是print_r($post_vars)使用echo json_encode($post_vars);

然后在您的javascript中,您想要var response = JSON.parse(oReq.responseText);

之后,您应该能够引用响应变量中的字段。 response.post_id

编辑:

使用JQuery会更容易。你能加入图书馆吗?然后添加以下代码:

$.post(
    "http://localhost/cms1/api2.php?type=post",
    $("#editPostForm").serialize(),
    function(data){
        console.log(data);
    }, "json");
);