2012-05-24 4 views
0

Я использую jpgraph для построения графиков статистики для своего сайта, и я хочу сделать это, не обновляя страницу. Поэтому я поместил код jpgraph в отдельный файл, назвал его plot_graphs.php и отправил запросы на него через AJAX. Теперь, если я сразу открою файл plot_graphs.php, он просто откроет графики. Но когда я открываю его с помощью AJAX и указать его, чтобы отобразить ответ в <div> на странице, что я получаю это:Изображение (график) из AJAX отображается как куча символов на странице

�PNG IHDR,��� IDATx���[email protected]���' I;Ⱦ���&*J]�ԥB�XEEK낈��Z۷�X�^�J�P�V��m�Ro]�V*R�Z��R�E�Av��S�Y&��ߧ0̜y�3'g&shb�BԡS]B��!�a��!�a��P}�ݻ7iҤ�� и т.д. и т.п.

Есть ли способ, чтобы получить эту работу без перезагрузки страницы и помещая код plot_graphs.php непосредственно в div? Шифрой страницы является utf-8, если это имеет значение. Это содержимое plot_graphs.php:

<?php 

require_once ('../jpgraph/src/jpgraph.php'); 
require_once ('../jpgraph/src/jpgraph_line.php'); 

$type=$_GET['type']; 
$unit=$_GET['unit']; 
$term=$_GET['term']; 

$datay1 = array(20,15,23,15); 
$datay2 = array(12,9,42,8); 
$datay3 = array(5,17,32,24); 

// Setup the graph 
$graph = new Graph(300,250); 
$graph->SetScale("textlin"); 

$theme_class=new UniversalTheme; 

$graph->SetTheme($theme_class); 
$graph->img->SetAntiAliasing(false); 
$graph->title->Set('Filled Y-grid'); 
$graph->SetBox(false); 

$graph->img->SetAntiAliasing(); 

$graph->yaxis->HideZeroLabel(); 
$graph->yaxis->HideLine(false); 
$graph->yaxis->HideTicks(false,false); 

$graph->xgrid->Show(); 
$graph->xgrid->SetLineStyle("solid"); 
$graph->xaxis->SetTickLabels(array('A','B','C','D')); 
$graph->xgrid->SetColor('#E3E3E3'); 
/* $graph->SetBackgroundImage("tiger_bkg.png",BGIMG_FILLPLOT); */ 

// Create the first line 
$p1 = new LinePlot($datay1); 
$graph->Add($p1); 
$p1->SetColor("#6495ED"); 
$p1->SetLegend('Line 1'); 

// Create the second line 
$p2 = new LinePlot($datay2); 
$graph->Add($p2); 
$p2->SetColor("#B22222"); 
$p2->SetLegend('Line 2'); 

// Create the third line 
$p3 = new LinePlot($datay3); 
$graph->Add($p3); 
$p3->SetColor("#FF1493"); 
$p3->SetLegend('Line 3'); 

$graph->legend->SetFrameWeight(1); 

// Output line 
$graph->Stroke(); 

?> 

ответ

1

Похоже, вы пытаетесь отправить двоичные данные без указания того, что эти данные. попробуйте следующее:

header("Content-type: image/png"); 
$graph->Stroke();