这个想法是通过像这样的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正在处理请求。
我的问题是:
当我使用“GET”或“POST”请求或使用卷发时,我没有遇到任何问题。
如果有人有更好的主意,我会对此持开放态度。 jQuery ajax不接受formData,jquery.ajax.plugin使用我正在使用的相同FormdataObject方法,所以请不要只发布jQuery并逃离场景......答案 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");
);