错误信息说明了你应该做什么:你应该使用'new'操作符来构造'XMLHttpRequest'。
在您创建 ajax 对象的位置,将 var ajax = XMLHttpRequest(); 更改为 var ajax = new XMLHttpRequest();
由于您无论如何都在使用 jquery,因此您可以使用 jquerys ajax method 来发出 ajax 请求,而不是处理 browser specifics of XMLHttpRequest。
$("#saveSig").click(function saveSig() {
//encode URI
var sigData = encodeURIComponent(canvas.toDataURL("image/png"));
$.ajax({
type: "POST",
url: 'sign/signature.php',
contentType: 'application/upload',
data: sigData,
success: function () {
$("#imgData").html('Thank you! Your signature was saved');
}
});
$('#debug').html(sigData);
});
更新回应各位cmets:
你必须明白,这个javascript和... click(function saveSig() {...}是在浏览器中执行的。所以你不应该在里面放任何 php,因为 php 必须由网络服务器执行。当您单击“#saveSig”元素时,浏览器会执行此功能,并通过调用$.ajax(...) 向后台的网络服务器发送一个新的HTTP POST 请求,调用url 'sign/signature.php'。该请求的响应数据可用于成功函数。下面是一个网络服务器 (php) 和浏览器 (javascript) 如何协同工作的示例。
签名/signature.php
<?php
// read the request data:
$sigData = (isset($_POST['data'])) ? $_POST['data'] : "";
$user_id = (isset($_POST['UserId'])) ? $_POST['userId'] : "";
// process your sigData here (e.g. save it in the database together with the user_id)
//generate the response:
echo "Successfully saved signature for user id: ".$user_id.".";
?>
javascript:
$("#saveSig").click(function saveSig() {
//encode URI
var sigData = encodeURIComponent(canvas.toDataURL("image/png"));
$.ajax({
type: "POST",
url: 'sign/signature.php',
contentType: 'application/upload',
data: {
data: sigData,
user_id: $('#user_id').val() // this get's the value from the hidden user_id input
},
success: function (responseData) {
$("#imgData").html('Thank you!' + responseData);
}
});
$('#debug').html(sigData);
});
也许 w3schools 的 AJAX Introduction 对你来说很有趣