无法获取AJAX的帖子值(普通Javascript)

时间:2014-05-15 09:06:42

标签: javascript php ajax post todataurl

我知道这个问题在这个论坛(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 )?

提前感谢您的时间和精力! :)

2 个答案:

答案 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