Pracuję nad projektem, w którym zaimplementowałem kilka wykresów/wykresów przy użyciu biblioteki PHP Rgraph. W moim skrypcie wykonuję następujące czynności dla wykresów:Powracający wywołanie jQuery AJAX 403 Niedozwolony błąd podczas przekazywania danych obrazu Rgraph
- Oblicz punkty wykresu i narysuj wykres za pomocą metody Rgraph
Draw()
. - Utwórz zmienną danych obrazu, używając metody
canvas.toDataURL()
. - Przekaż tę zmienną danych obrazu do serwera przy użyciu metody jQuery AJAX
$.post()
. - Zapisz obraz na serwerze za pomocą skryptu PHP.
Wszystko w tym rozwiązaniu działa świetnie na moim serwerze lokalnym, jednak na serwerze programowania żądanie AJAX, które przekazuje dane obrazu, zwraca wartość 403 Error
.
Zalogowałem dane po stronie klienta i serwera, aby ustalić problem. Rejestrowanie po stronie klienta potwierdza, że określona zmienna imageData wygląda poprawnie. Jednak rejestrowanie po stronie serwera potwierdza, że przyczyną problemu jest przesłana zmienna imageData.
Nie było very similar question posted last year about this, jednak nie byli w stanie określić głównej przyczyny tego. Czy ktokolwiek może wskazać mi właściwy kierunek rozwiązania tego problemu?
Myślę, że jest to możliwy problem z kodowaniem danych, ale jeśli tak, to dlaczego działa on na jednym serwerze, a nie na drugim?
Moja Stosowna Javascript:
radar.Set('chart.contextmenu', [
['Get PNG', RGraph.showPNG],
null,
['Cancel', function() {}]
]);
radar.Draw();
var imageData = radar.canvas.toDataURL("image/png");
console.log('imageData: ' + imageData);
console.log('filename: ' + 'tmpRadar<?php echo $us['UsersSurvey']['user_id']; ?>-<?php echo $survey['Survey']['id']; ?>.png');
$.post("/Surveys/save_chart", {
src : imageData,
filename: 'tmpRadar<?php echo $us['UsersSurvey']['user_id']; ?>-<?php echo $survey['Survey']['id']; ?>.png'
});
Client Side Logging:
imageData: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABLAAAAOECAYAAACxbcj6AAAgAElEQ…AgQIAAgVECAqxR49YsAQIECBAgQIAAAQIECBAgQKCfwP8CXHJ+WDHVMbcAAAAASUVORK5CYII=
filename: tmpRadar19-1.png
POST http://website.com/Surveys/save_chart 403 (Forbidden)
Funkcja PHP wywołana przez AJAX:
public function save_chart() {
if($this->request->is('ajax')) {
$this->log('request data: '.print_r($this->request->data, true));
$filename = $this->request->data['filename'];
$src = $this->request->data['src'];
$src = substr($src, strpos($src, ",") + 1);
$decoded = base64_decode($src);
$fp = fopen(WWW_ROOT.'files/graphs/'.$filename,'wb');
if(fwrite($fp, $decoded)) {
fclose($fp);
return json_encode(array('success' => '1'));
} else {
fclose($fp);
return json_encode(array('success' => '0'));
}
}
}
proszę pokazać zarówno stronę klienta rejestrującą, jak i serwerową (zarówno tę, która działa, jak i tę, która nie działa). –
Czy sprawdziłeś pliki dziennika apache? Myślę, że mogą dać wgląd w problem. – dav
Czy zweryfikowałeś, że to nie jest kwestia CORS? https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS – DIMMSum