XMLhttprequest不调用PHP脚本

时间:2016-10-18 07:57:52

标签: javascript php xmlhttprequest

我是Web开发的新手,我正在尝试在我的sql数据库中保存base64编码的图像。 sql语句工作正常,因为我能够通过PHP将用户注册数据放入数据库,但是我遇到麻烦使用XMLhttprequest将图像发送到PHP,以便我可以使用$ _GET方法接收数据。严格禁止JQuery,所以我陷入了困境。图像变量包含数据,我确实检查了它是否正确保存。这就是我发送XML请求的方式:

var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function()
{
    if (this.readyState == 4 && this.status == 200)
    {
        alert(this.responseText);
    }
}
xhttp.open("POST", "saveimage.php?img="+image, true);
xhttp.send();

图像变量包含数据。此代码也运行,因为我在其间放置警报以确保它。然后在saveimage.php文件上:

<?php

session_start();

$email = $_SESSION['email'];
$image = $_GET['img'];
$conn = new PDO("mysql:host=localhost; dbname=camagru", "root", "admin");
$conn->setAttribute(PDO::ERRMODE_EXCEPTION);
$sql = $conn->prepare("INSERT INTO `images` (`image`, `email`) VALUES (:image, :email");
$sql->bindParam(':image', $image);
$sql->bindParam(':email', $email);
$sql->execute();

?>

可悲的是,从这里开始,没有任何反应。无论怎样,我的数据库都是空的。我错过了什么吗?看起来PHP脚本根本不运行。

2 个答案:

答案 0 :(得分:1)

我认为base64编码的图像字符串对于get请求来说太长了 - 例如,限制在IE上的2083个字符。

你试过POST吗?

您可以检查Web服务器日志以查看是否收到整个字符串。

Heres一些更新的代码:

xhttp.setRequestHeader("Content-type" , "application/x-www-form-urlencoded");
xhttp.send("img=" + image);

请参阅this答案,了解如何发布数据

答案 1 :(得分:1)

您正在通过邮寄发送请求,但您正在检查$ _GET请求。

设置这样的参数

var params =  "img"+image;

和你这样的电话

xhttp.open("POST", "saveimage.php, true);
xhttp.send(param);

和您的服务器响应脚本

<?php 
session_start();

if($_SERVER['REQUEST_METHOD'] == "POST" && (isset($_FILES['img']['name']))
{

$email = $_SESSION['email'];
$image = $_POST['img'];
$conn = new PDO("mysql:host=localhost; dbname=camagru", "root", "admin");
$conn->setAttribute(PDO::ERRMODE_EXCEPTION);
$sql = $conn->prepare("INSERT INTO `images` (`image`, `email`) VALUES (:image, :email");
$sql->bindParam(':image', $image);
$sql->bindParam(':email', $email);
$sql->execute();


}

&GT;

您是尝试上传文件还是仅传递文件名称抛出ajax? 如果要上载文件,请记住在将其记录到数据库之前必须检查服务器上是否存在文件。如果您没有上传,则不需要(isset)。