如何从PHP返回文件名到Jquery

时间:2013-08-24 17:07:18

标签: php jquery ajax

我使用以下代码将画布图像保存为.png文件:

jQuery的:

$(".save").click(function () {
    var canvas = $("#standard_canvas");
    var src = canvas[0].toDataURL("image/png");
    $.ajax({
        url: 'save.php',
        type: 'POST',
        data: {
            data: src
        },
        complete: function (data, status) {
            if (status == 'success') {
                alert("image saved!")
            }
        }
    });
});

[save.php]

<?php
$based64Image = substr($_POST['data'], strpos($_POST['data'], ',') + 1);
$image        = imagecreatefromstring(base64_decode($based64Image));
imagealphablending($image, false);
imagesavealpha($image, true);

$fileName = '';
if ($image != false)
  {
    $fileName = 'image/designs/' . time() . '.png';
    if (!imagepng($image, $fileName))
      {
        //          fail;
      }
  }
else
  {
    //          fail;
  }

?>

我想要做的是将新文件名传递回我的ajax调用,以便我可以使用它来填充隐藏的输入字段(然后我可以将其与客户订单一起保存)。有人可以帮忙吗?

感谢。

2 个答案:

答案 0 :(得分:1)

在你的php文件中,你可以创建一个包含文件名的json响应

  $data['filename'] = $fileName;
  echo json_encode($data);

在你的ajax回复中读出来

$(".save").click(function () {
    var canvas = $("#standard_canvas");
    var src = canvas[0].toDataURL("image/png");
     $.ajax({
         url: 'save.php',
         type: 'POST',
         dataType: 'json',
         data: {
             data: src
         },
         success: function (data, status) {
             if (status == 'success') {
                 alert("image saved!")
                 var filename = data.filename //<--------
             }
         }
     });
});

编辑: (然后我可以随客户订单一起保存)

更好的做法是将文件名存储在服务器端的会话变量中。 这可以防止客户端表单更改文件名(即使它在隐藏字段中)

答案 1 :(得分:1)

只需在图片上传成功部分添加以下内容:

echo $filename 

然后在你的ajax电话中,

$.ajax({
    url: 'save.php',
    type: 'POST',
    data: {
        data: src
    },
    complete: function (data, status) {
        if (status == 'success') {
            alert("image saved!");
            alert("Filename : "+data);
            // Do anything with the file name here
        }
    }
});

这应该为你做。