我知道这个问题在这个论坛(Unable to get values in POST php web serivce)得到了解答,但问题和答案都使用了jQuery,在我的例子中,我不能使用它(无论为什么)。 ..
所以,我有一个Javascript文件,用于制作画布'“屏幕截图”(使用“toDataURL()”函数)并使用AJAX将其发送到PHP文件。由于要发送的数据非常长,我无法使用“GET”方法(AJAX返回414错误:“URL TOO LONG”),因此我需要使用“POST”。
我已经按照普通Javascript 上的一些示例(这些都不容易找到,因为每个人都使用jQuery!:P),我的代码如下所示:
var dataURL = me.video.getScreenCanvas().toDataURL();
var req = false;
try{
req = new XMLHttpRequest();
} catch (e){
// IE
try{
req = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
// try an older version
try{
req = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e){
return false;
}
}
}
req.onreadystatechange = function(){
if(req .readyState == 4){
if(req.status == 200)
{
console.log("RESULT AJAX: "+req.responseText);
}else{
console.log("ERROR AJAX: returned status code "+req.status+" "+req.statusText);
}
}
}
req.open("POST", "http://www.mywebpage.com/image_upload.php", true);
req.setRequestHeader("Content-type","application/x-www-form-urlencoded");
req.send("imgdata="+dataURL);
当尝试记录“dataURL”变量的内容时,它会记录一个大字符串,如“image / png ... blablabla”,因此我假设数据是按预期生成的。
此时,PHP文件只是尝试检索结果:
<?php
$imageData = '';
if(isset($_POST['imgdata']))
{
echo "correct POST!";
$imageData = $_POST['imgdata'];
}else if(isset($_GET['imgdata'])){
echo "correct GET!";
$imageData = $_GET['imgdata'];
}
echo "ImgData: ".$imageData;
if($imageData != '')
{
$imageData = str_replace(' ','+',$imageData);
$decodedData = base64_decode($imageData);
if(file_put_contents('imatge1.jpeg', $decodedData) !== FALSE)
{
echo "Image has been successfully processed...?";
}else{
echo "Error trying to process the image...";
}
}
?>
但是,PHP文件不回显“POST”和“GET”消息,“ImgData”回显为空,没有“成功”,也没有“处理图像时出错”消息被回显......所以< strong>似乎PHP文件无法检索由AJAX的“POST”方法传递的数据。
我做错了什么?如何使用普通Javascript 解决此问题(重要的是不要使用jQuery )?
提前感谢您的时间和精力! :)
答案 0 :(得分:1)
我更改了您的JavaScript,并对此进行了测试,请尝试与您合作:
function create_XHR(){
var XHR = null;
if (window.XMLHttpRequest){
XHR = new XMLHttpRequest();
}
else if(window.ActiveXObject){
try {
XHR = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
XHR = new ActiveXObject("Microsoft.XMLHTTP");
}
}
else {
alert("Your navigator is old to run objets XMLHTTPRequest...");
XHR = false;
}
return XHR;
}
function ajax_post(page, data) {
var XHR = create_XHR();
XHR.open("POST", page, true);
XHR.onreadystatechange = function() {
if (XHR.readyState === 4 && (XHR.status === 200 || XHR.status === 0)) {
console.log("Success Transaction");
}
};
XHR.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
XHR.send(data);
}
//Running the code :
//==================
var dataURL = me.video.getScreenCanvas().toDataURL();
ajax_post("http://www.mywebpage.com/image_upload.php", {"imgdata":dataURL});
修改cors http: 在服务器PHP中,在页面的第一个“image_upload.php”中添加它:
//Part added by ilyas :
if (isset($_SERVER['HTTP_ORIGIN'])) {
header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Max-Age: 86400'); // cache for 1 day
}
//End of part.
答案 1 :(得分:0)
我认为您需要在文件httpd.conf中配置服务器apache
在Apache下,限制是可配置的值LimitRequestLine。如果要支持更长的请求URI,请将此值更改为大于默认值8190的值。
改变:
LimitRequestLine 4094
到一个值&lt; 8190