2017-05-19 96 views
1

我的ajax请求将文件放入目录中。
但是我没有收到PHP文件的回应。AJAX未收到PHP响应

我使用警报来确定是否收到回复。

任何帮助将不胜感激。

function doodleSave() { 
    var canvas = document.getElementById("doodle-canvas"); 
    var canvasData = canvas.toDataURL("image/png"); 
    $.ajax({ 
    url:'test.php', 
    type:'POST', 
    data:{ data:canvasData }, 
    success: function(response){ 
     alert(response); 
     //echo what the server sent back... 
    } 
    }); 
} 


<?php 

/* AUTOMATED VARIABLES */ 
$upload_dir = "images/external/doodles/"; 
$url   = md5(uniqid(rand(), true)); 
$unique_post_id = md5(uniqid(rand(), true)); 
$timestamp  = time(); 
$nature   = "doodle"; 
$imageUrl  = $upload_dir.$url.'.png'; 

$img = $_POST['data']; 
$img = substr($img,strpos($img,",")+1); 
$data = base64_decode($img); 
$file = $upload_dir . $url . ".png"; 
$success = file_put_contents($file, $data); 


if(!$success) { 

    exit('unable to upload'); // Prints success and exit the script 

} else { 

    exit($file); // Prints success and exit the script 

} 

?> 

UPDATE:

我的成功和错误Ajax和它作为一个错误:

function doodleSave() { 
    var canvas = document.getElementById("doodle-canvas"); 
    var canvasData = canvas.toDataURL("image/png"); 
    $.ajax({ 
    url:'test.php', 
    type:'POST', 
    data:{ data:canvasData }, 
     success: function(){ 
     alert('success'); 
     }, 
     error: function(){ 
     alert('failure'); 
     } 
    }); 
} 
+0

如果您查看网络控制台中的请求,XHR请求会获得哪些http响应代码?我不知道exit()会如何影响请求的响应代码,所以它可能会返回一个错误响应代码。在这种情况下,您可能希望使用'header()'指定请求响应代码,而不是使用exit()。例如'header(“HTTP/1.0 200 Ok”)或'header(“HTTP/1.0 400 Bad Request”)' – Taplar

+0

我查看了XHR响应,它们都是我的通知检查器,每10秒运行一次。这个上传脚本没有任何内容 – Sam

+0

但是当我按下doodleSave按钮 – Sam

回答

1

使用json_encode用AJAX将数据发送回。

<?php 

/* AUTOMATED VARIABLES */ 
$upload_dir = "images/external/doodles/"; 
$url   = md5(uniqid(rand(), true)); 
$unique_post_id = md5(uniqid(rand(), true)); 
$timestamp  = time(); 
$nature   = "doodle"; 
$imageUrl  = $upload_dir.$url.'.png'; 

$img = $_POST['data']; 
$img = substr($img,strpos($img,",")+1); 
$data = base64_decode($img); 
$file = $upload_dir . $url . ".png"; 
$success = file_put_contents($file, $data); 
if(!$success) { 

    echo json_encode(['filename' => false]); 
    exit(); // Prints success and exit the script 

} else { 

    echo json_encode(['filename' => $file]); 
    exit(); 
} 

?> 

在你的AJAX为此

function doodleSave() { 
    var canvas = document.getElementById("doodle-canvas"); 
    var canvasData = canvas.toDataURL("image/png"); 
    $.ajax({ 
     url:'test.php', 
     type:'POST', 
     data:{ data:canvasData }, 
     success: function(response){ 
      var data = JSON.parse(response); 
      if (data.filename != false) { 
       alert(data.filename); 
      }else { 
       alert('unable to upload'); 
      } 
     }, 
     error: function(){ 
      alert('failure'); 
     } 
    }); 
} 

您还可以使用$.post()这是$.ajax()POST请求的简写。

function doodleSave() { 
    var canvas = document.getElementById("doodle-canvas"); 
    var canvasData = canvas.toDataURL("image/png"); 

    $.post('test.php', {data: canvasData}, function (response) { 
     var data = JSON.parse(response); 
     if (data.filename != false) { 
      alert(data.filename); 
     } else { 
      alert('unable to upload'); 
     } 
    }) 
} 
+0

我已经做了这个单词,我没有得到任何警报。我已经检查过控制台,它响应200 – Sam

+0

是你的PHP文件'test.php'? – julekgwa

+0

我正在使用整个http://www.website.etc。只是将它改为名称和扩展名,它工作正常!谢谢 – Sam

0

您需要替换所有出现带加号(+)的空格。

您的代码与修复:

<?php 

/* AUTOMATED VARIABLES */ 
$upload_dir = "images/external/doodles/"; 
$url   = md5(uniqid(rand(), true)); 
$unique_post_id = md5(uniqid(rand(), true)); 
$timestamp  = time(); 
$nature   = "doodle"; 
$imageUrl  = $upload_dir.$url.'.png'; 

$img = $_POST['data']; 
$img = substr($img,strpos($img,",")+1); 
$img = str_replace(' ', '+', $img); // Here is a fix 
$data = base64_decode($img); 
$file = $upload_dir . $url . ".png"; 
$success = file_put_contents($file, $data); 


if(!$success) { 

    exit('unable to upload'); // Prints success and exit the script 

} else { 

    exit($file); // Prints success and exit the script 

} 

?> 
+0

仍然没有收到$文件变量的响应 – Sam

+0

@Sam图像将被上传并保存成功? –

+0

它上传成功,但我需要返回的位置返回到AJAX – Sam