Próbuję wysłać adres URL danych do php, ale bezskutecznie. Mój plik .js jest następujący.

var dataURL = signaturePad.toDataURL();
alert(dataURL);
$.ajax({ 
    type: "POST", 
    url: "test.php", 
    data: { 
    imgBase64: dataURL 
    } 
    }).done(function(o) { 
      console.log('saved');
      alert(o); 
    });

Wyjście alert (dataURL) jest następujące;

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAhkAAADZCAYAAACNbSIWAAAeW.....

Test.php

<?php
if($_POST['imgBase64']) { 
$img = $_POST['imgBase64'];
}
else{
$img = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAhkAAADZCAYAAACNbSIWAAAeW.....";
}
$img = str_replace('data:image/png;base64,', '', $img);
$img = str_replace(' ', '+', $img);
$fileData = base64_decode($img);
//saving
$timestamp = date('YmdHis');
$fileName = ''.$timestamp.'.png';
echo"$fileData";
file_put_contents($fileName, $fileData);
?>

W moim pliku php podałem wartość mojego alertu do celów testowych. Teraz moja strona php działa w 100% dzięki testowi i nie przekazuje żadnej wartości z mojej funkcji .js. ale z poprawną wartością nie publikuje nawet na mojej stronie php, tylko wtedy, gdy usuwam wszystkie nie standardowe znaki z dataURL, a następnie publikuje, ale jest oczywiste, że dane są uszkodzone.

Aby uniknąć dalszych nieporozumień, poniższy kod działa w 100%, czyli .js i php. gdzie var dataURL = signaturePad.toDataURL (); jest przekazywana do funkcji

function postData(data) {
    alert(data);
    var desired = data.replace(/[^\w\s]/gi, '');
    $.ajax({ 
        type: "POST", 
        url: "test.php", 
        data: { 
        imgBase64: desired 
        } 
    }).done(function(o) { 
       console.log('saved');
       alert(o); 
    }); 
}

Więc problem polega na tym, że .js nie będzie wysyłał postów z podanym dataUrl ze względu na znaki specjalne, ale nie mogę ich usunąć .. Nawet próbowałem var pożądane = encodeURIComponent (data); wiedźma mogę przynajmniej rozszyfrować na stronie php, ale to też nie chce pisać.

0
user3744959 22 marzec 2020, 03:14

2 odpowiedzi

Najlepsza odpowiedź

Dzięki za odpowiedzi ...

Skończyło się na utworzeniu najpierw obiektu blob i wysłaniu go.

function dataURLToBlob(dataURL) {
  var parts = dataURL.split(';base64,');
  var contentType = parts[0].split(":")[1];
  var raw = window.atob(parts[1]);
  var rawLength = raw.length;
  var uInt8Array = new Uint8Array(rawLength);

  for (var i = 0; i < rawLength; ++i) {
    uInt8Array[i] = raw.charCodeAt(i);
  }


  return new Blob([uInt8Array], { type: contentType }); 



    $.post("test2.php",
    {
      name: uInt8Array
    },
    function(data,status){
      alert("Data: " + data + "\nStatus: " + status);
    });

}
0
user3744959 3 kwiecień 2020, 09:05
data: { 
    imgBase64: data
    //send key is imgBase64 and data value is undefined in given scope
    //replace data with dataURL
} 

A w pliku php zmień to $_POST['image'] na $_POST['imgBase64']

0
Ivan Barayev 22 marzec 2020, 00:38