发送带字符串的javascript数组到php动作

问题描述:

I want to send an array with image strings to my php action. This is what I do so far:

$('#savepdf').click(function() {
    var imagesarray = new Array();
    var count = 4;
    var quizid = <?php echo json_encode($quizid); ?>;
    for (var i=0; i<count; i++)
    {
        var chart = Highcharts.charts[i];
        var canvasname;
        if(i == 0){
            canvasname = "canvas";
        }
        else{
            canvasname = "canvas" + i;
        }

        // get highcharts
        canvg(document.getElementById(canvasname), chart.getSVG())

        var canvas = document.getElementById(canvasname);
        var img = canvas.toDataURL("image/png");

        imagesarray[i] = img;
    }

    imagesarray = JSON.stringify(imagesarray);

    // AJAX CALL TO ACTION
    $.download('/results/savepdf','quizid=' + quizid + '&image=' + imagesarray);
});

The array that I send looks like this:

["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAYAAAByNR6YAAAgAElEQ…197b1kPfJ5y3guHO4WLEyAAAECBAgcEFjz7y+zZJ6ttf8GC0YA4ro/bucAAAAASUVORK5CYII=","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAYAAAByNR6YAAAgAElEQ…9v2cl0YeqeBTqMAAIIIIAAAgMINO3aT3a+sfNxGIa7fwBwOTGmIk2OYgAAAABJRU5ErkJggg==","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAYAAAByNR6YAAAgAElEQ…xdLNBhIkAEiAARIAJEIA8I7FRlf1T/XlD/hhcoUOCv/we6Hn4A9659wwAAAABJRU5ErkJggg==","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAYAAAByNR6YAAAgAElEQ…BdGOlYwAkjASSABJAAEkACBgm8UI89qf6sUX9GRIkS5cr/AFfL9D3Dad7CAAAAAElFTkSuQmCC"]

In my PHP action I do the following:

if(isset($_POST['quizid']))
     $quizid = $_POST['quizid'];
if(isset($_POST['image']))
     $image = $_POST['image'];

var_dump(json_decode($image));

The dump just shows "NULL". When I do this :

var_dump($image);

I just get : string(1) "["

我想将带有图像字符串的数组发送到我的php动作。 这就是我到目前为止所做的: p>

  $('#savepdf')。click(function(){
 var imagesarray = new Array(); 
 var count  = 4; 
 var quizid =&lt;?php echo json_encode($ quizid);?&gt ;; 
 for(var i = 0; i&lt; count; i ++)
 {
 var chart = Highcharts.charts [  i]; 
 var canvasname; 
 if(i == 0){
 canvasname =“canvas”; 
} 
 else {
 canvasname =“canvas”+ i; 
} 
 
  //获取highcharts 
 canvg(document.getElementById(canvasname),chart.getSVG())
 
 var canvas = document.getElementById(canvasname); 
 var img = canvas.toDataURL(“image / png”)  ; 
 
 imagesarray [i] = img; 
} 
 
 imagesarray = JSON.stringify(imagesarray); 
 
 // AJAX CALL TO ACTION 
 $ .download('/ results / savepdf'  ,'quizid ='+ quizid +'&amp; image ='+ imagesarray); 
}); 
  code>  pre> 
 
 

我发送的数组如下所示:

[“data:image / png; base64,iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQ CAYAAAByNR6YAAAgAElEQ ... 197b1kPfJ5y3guHO4WLEyAAAECBAgcEFjz7y + zZJ6ttf8GC0YA4ro / bucAAAAASUVORK5CYII =”, “数据:图像/ PNG; BASE64,iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAYAAAByNR6YAAAgAElEQ ... 9v2cl0YeqeBTqMAAIIIIAAAgMINO3aT3a + sfNxGIa7fwBwOTGmIk2OYgAAAABJRU5ErkJggg ==”, “数据:图像/ PNG; BASE64,iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAYAAAByNR6YAAAgAElEQ ... xdLNBhIkAEiAARIAJEIA8I7FRlf1T / XLD / hhcoUOCv / we6Hn4A9659wwAAAABJRU5ErkJggg ==”, “数据:图像/ PNG; BASE64,iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAYAAAByNR6YAAAgAElEQ ... BdGOlYwAkjASSABJAAEkACBgm8UI89qf6sUX9GRIkS5cr / AFfL9D3Dad7CAAAAAElFTkSuQmCC”] p> BLOCKQUOTE>

在我的PHP动作我执行以下操作: p>

  if(isset($ _ POST ['quizid']))
 $ quizid = $ _POST ['quizid']; 
if(isset($ _ POST ['image']))
 $ image  = $ _POST ['image']; 
 
var_dump(json_decode($ image)); 
  code>  pre> 
 
 

转储只显示“NULL”。 当我这样做时: p>

  var_dump($ image); 
  code>  pre> 
 
 

我得到: string (1)“[” code> p> div>

Try to:

imagesarray = encodeURIComponent( JSON.stringify(imagesarray) );

UPDATE

and in php use

$image = json_decode(urldecode($_POST['image']));

I'm not familiar with the $.download method. Presumably it is an AJAX extension that allows for file downloads. I can guess how it probably works.

The problem is that you are not sending a valid HTTP request. JSON needs to be escaped to be sent over HTTP. You could do this yourself using encodeURIComponent, or you could let jQuery's $.param method handle it for you.

var data = $.param({
    quizid: quizid,
    image: imagesarray
});
$.download('/results/savepdf', data);