31

jQuery AJAX呼び出しによって返された画像をHTMLのメインストリームに表示することは可能ですか?

ヘッダー付きの画像(image / PNG)を描画するスクリプトがあります。ブラウザで呼び出すだけで画像が表示されます。

しかし、このスクリプトでjQueryを使用してAJAX呼び出しを行うと、きれいな画像を表示できず、奇妙な記号がたくさんあるものがあります。これは、ヘッダー付きの画像(image / PNG)を作成する私のスクリプトです。

#!/usr/bin/perl 

use strict;
use CGI;
use Template;
use CGI::Carp qw(fatalsToBrowser);
use lib qw(lib);
use GD;

my $cgi    = new CGI;

my $id_projet            =  $cgi   -> param('id_projet') ;      # 

# Create a new image
my $image = new GD::Image(985,60) || die;
my $red =  $image->colorAllocate(255, 0, 0);
my $black =  $image->colorAllocate(0, 0, 0);

$image->rectangle(0,0,984,59,$black);
$image->string(gdSmallFont,2,10,"Hello $id_projet ",$black);
# Output the image to the browser

print $cgi -> header({-type => 'image/png',-expires => '1d'});

#binmode STDOUT;

print $image->png;

次に、AJAX呼び出しを含むメインスクリプトがあります。

  <script type="text/javascript" > 

  $(document).ready( function() { 

  $.ajax({
  type: "POST",
  url:'get_image_probes_via_ajax.pl',
  contentType: "image/png",
  data: "id_projet=[% visual.projet.id %]",
  success: function(data){
  $('.div_imagetranscrits').html('<img src="' + data + '" />'); },
 } );

 </script>  

私のHTMLファイルにはclass="div_imagetranscrits"、画像を入力するためのdivが1つあります。

何が間違っているのかわかりません。もう1つの解決策は、スクリプトで画像をディスクに書き込み、srcに含めるパスを取得して表示することです。しかし、AJAXリクエストから直接image/PNGヘッダー付きの画像を取得することは可能だと思っていました。

4

4 に答える 4

43

base64 でエンコードされた画像を送り返す必要があります。これを見てください: http://php.net/manual/en/function.base64-encode.php

次に、ajax 呼び出しで、success 関数を次のように変更します。

$('.div_imagetranscrits').html('<img src="data:image/png;base64,' + data + '" />');
于 2012-05-29T15:48:49.373 に答える
21

方法1

ajax呼び出しを行うのではなく、img要素のsrcを画像のURLとして配置するだけです。

これは、POSTの代わりにGETを使用する場合に役立ちます

<script type="text/javascript" > 

  $(document).ready( function() { 
      $('.div_imagetranscrits').html('<img src="get_image_probes_via_ajax.pl?id_project=xxx" />')
  } );

</script>

方法2

その画像にPOSTして、自分のやり方で実行したい場合(クライアント側で画像のコンテンツを解析しようとすると、次のようになります:http: //en.wikipedia.org/wiki/Data_URI_scheme

をbase64にエンコードする必要があります。その後、 imgsrcdataに入れることができます。data:[<MIME-type>][;charset=<encoding>][;base64],<data>

例として:

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot img" />

base64にエンコードするには:

于 2012-05-29T15:41:31.127 に答える