0

イメージ文字列を含む配列を PHP アクションに送信したいと考えています。これは私がこれまで行っていることです:

$('#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);
});

送信する配列は次のようになります。

["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAYAAAByNR6YAAAgAElEQ…197b1kPfJ5y3guHO4WLEyAAAECBAgcEFjz7y+zZJ6ttf8GC0YA4ro/bucAAAAASUVORK5CYII=","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAYAAAByNR6YAAAgAElEQ…9v2cl0YeqeBTqMAAIIIIAAAgMINO3aT3a+sfNxGIa7fwBwOTGmIk2OYgAAAABJRU5ErkJggg==","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAYAAAByNR6YAAAgAElEQ…xdLNBhIkAEiAARIAJEIA8I7FRlf1T "

私のPHPアクションでは、次のことを行います:

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

var_dump(json_decode($image));

ダンプには「NULL」のみが表示されます。私がこれを行うとき:

var_dump($image);

私はただ得る:string(1) "["

4

2 に答える 2

2

試してみてください:

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

アップデート

そしてphpで使用

$image = json_decode(urldecode($_POST['image']));
于 2013-11-06T10:31:50.703 に答える
0

私はその$.download方法に精通していません。おそらく、ファイルのダウンロードを可能にする AJAX 拡張機能です。おそらくどのように機能するか推測できます。

問題は、有効な HTTP 要求を送信していないことです。JSON を HTTP 経由で送信するには、エスケープする必要があります。を使用して自分でこれを行うencodeURIComponentことも、jQuery の$.paramメソッドに処理させることもできます。

var data = $.param({
    quizid: quizid,
    image: imagesarray
});
$.download('/results/savepdf', data);
于 2013-11-06T10:33:30.147 に答える