2013-11-18 3 views
0

Когда я называю это JS:URI слишком долго возвращения из АЯКС пост

jQuery.ajax({ 
     type: 'POST', 
     url: '/renderscooter', 
     data: { img: imgSrc, deimg: imgDe, newimg: img} 
    }) 
    .done(function(html) { 
     jQuery('#content_illu').css('background-image', 'data:image/png;base64,'+html); 
     jQuery('#content_illu').css('background-size','auto 737px'); 
    }); 

Я ожидаю, что новый образ, созданный динамически отображается в браузере, но я получаю:

414 Request-URI Too Large 

Я вижу изображение поставляется с URL-адресом:

http://pg251.inetpsa.com/configure/iVBORw0KGgoAAAANSUhEUgAAB4AAAAQ4C.... 

, и это странно для меня.

Как избежать этой проблемы?

Изображения отправляются обратно на вызов Ajax из метода контроллера ZF2 PHP как:

... creation of the image ... 
ob_start(); 
//ImagePng($imgPng, $dstImagePathName); 
ImagePng($imgPng); 
ImageDestroy($imgPng); 
$imageData = ob_get_clean(); 

$response = $this->getResponse(); 
$response 
->getHeaders() 
->addHeaderLine('Content-Transfer-Encoding', 'binary') 
->addHeaderLine('Content-Type', 'image/png') 
->addHeaderLine('Content-Length', mb_strlen($imageData)); 
//$response->setContent('url("'.$dstImageName.'")'); 
$response->setContent(base64_encode($imageData)); 
return $response; 

Спасибо за ваше время.

EDIT

Наконец я избегал метод AJAX, и использовать этот подход: change background-image to other one created dynamically by ajax call script

+0

Почему 'content-type image/png'? Вы отправляете обратно текст – charlietfl

+0

, вы правы, мне не нужно устанавливать это ... в любом случае проблема не решена. Я также удалил кодировку base64. Я не получаю длинный uri сейчас, но вместо этого изображение отображается. Я вижу кусок байтов в качестве ответа с firebug. Я пробовал разные способы, но, по крайней мере, я сохраняю изображение на диск и возвращаю ur ur (path) в качестве ответа на вызов Ajax. Я не могу получить изменение изображения (отображается). Я стараюсь избегать наложения образа на диск. – manou

+0

работает ли он на php-странице на сервере, без ajax, просто выводит тег изображения с данными в нем? – charlietfl

ответ

0

Предполагая, что вы используете веб-сервер Apache. В Apache имеется настраиваемое значение, LimitRequestLine. Если вы хотите поддерживать более длинный запрос URI, измените это значение на нечто большее, чем значение по умолчанию.

От http://httpd.apache.org/docs/2.2/mod/core.html#limitrequestline:.

«Эта директива задает число байтов, которые будут разрешены на HTTP линии запроса Директива LimitRequestLine позволяет администратору сервера установить ограничение на допустимый размер доступа клиента HTTP-строка запроса. Поскольку строка запроса состоит из HTTP-метода, URI и версии протокола, директива LimitRequestLine устанавливает ограничение на длину запроса-URI, разрешенного для запроса на сервере. Серверу требуется это значение для быть достаточно большим для хранения любых имен своих ресурсов, включая любую информацию, которая может быть передана в части запроса запроса GET ».

+0

Даже если: при нормальных условиях значение не должно меняться от значения по умолчанию. Кроме того, вы не можете установить значение выше 8190 без изменения источника и восстановления. Я могу изменить Limit, но теперь я получаю Forbidden. Странно, так как это бинарный фрагмент байтов для отображения, ничего не связанного с разрешением ... – manou

+0

мм. Просто попробуйте с $ .ajax вместо jquery.ajax –

+0

Так как я знаю, что jQuery точнее, чем $, так как $ является аббревиатурой. Btw Я изменил и все еще запретил .. Во всяком случае, когда у меня нет этого длинного запроса через другие попытки, изображение не отображается в любом случае ... и я могу видеть только кусок байтов с firebug. – manou

Смежные вопросы