我正在javaScript
的客户端上创建一个签名,然后尝试通过ajax将结果发送到后面的代码(c#
)。我尝试传递的结果数组的类型为uint8clampedarray
,但我无法执行,方法背后的代码从未被击中。
它击中了Page Load方法,但没有击中SetSignature方法。
javaScript
var signatureByteArray = signature.getSignatureImage();
SendArrayViaAjax(signatureByteArray);
function getSignatureImage() {
return ctx.getImageData(0, 0, canvas.width, canvas.height).data;
}
function SendArrayViaAjax(signatureArray) {
var sigArray = JSON.stringify( signatureArray);
$.ajax({
type: "POST",
data: { array: sigArray },
dataType: "json",
contentType: "application/json; charset=utf-8",
url: "/Intranet/OHS/SOP/SOPSignOffs.aspx/SetSignature",
success: function (msg) {
alert(msg.d + "success");
},
error: function (response) {
alert("an error has taken place");
}
});
}
背后的代码
[WebMethod]
public static string SetSignature(string[] array)
{
var x = array[2];
return "success";
}
我的问题是如何通过ajax以uint8clampedarray
的形式发送数组,以及如何在c#中检索它?还是有更好的方法?
ctx = canvas.getContext("2d");`
是获取Canvas
元素的方式。
thew签名的生成确实很好,只是将其发送回C#
就是问题所在。
答案 0 :(得分:0)
我发现的解决方案是用不同的方式(旧方法)生成画布图像数据。
不同地生成图像
function getSignatureImage() {
//return ctx.getImageData(0, 0, canvas.width, canvas.height).data;
var pic = canvas.toDataURL("image/png");
pic = pic.replace(/^data:image\/(png|jpg);base64,/, "")
return pic;
}
然后在 ajax功能
中$.ajax({
type: "POST",
data: '{"imageData" : "'+ signatureImage + '" }',
....
然后在后面的代码
public static string SetSignature(string imageData)
{
string filePath = HttpContext.Current.Server.MapPath("Signature.png");
using (FileStream fs = new FileStream(filePath, FileMode.Create))
{
using (BinaryWriter bw = new BinaryWriter(fs))
{
byte[] data = Convert.FromBase64String(imageData);
bw.Write(data);
bw.Close();
}
}
}