#javascript #php #jquery #ajax #laravel
Вопрос:
Я пытаюсь удалить изображение с помощью нажатия кнопки. Я использую jQuery ajax для отправки запроса post на серверную часть, а серверная часть-Laravel. Я запускаю запрос на публикацию, когда нажимается кнопка, и я не использую форму. Я не уверен, что это правильный подход. Любые идеи/предложения будут высоко оценены.
Вот мой html-код
<div class="deal-images-in-new-deal-modal" id="deal-images-after-uploading-section" style="display:flex; justify-content: center; padding:10%; flex-wrap: wrap;">
<div class="new-deal-upload-image">
<img src="" width="150" height="150">
</div>
<div class="new-deal-upload-icon">
<button type="submit" class="btn delete_image_button" id="after_image_upload_0" value="151159">
<i class="trash icon" id="after_image_upload" style="color:red;"></i>
</button>
</div>
<div class="new-deal-upload-image">
<img src="" width="150" height="150">
</div>
<div class="new-deal-upload-icon">
<button type="submit" class="btn delete_image_button" id="after_image_upload_1" value="151160">
<i class="trash icon" id="after_image_upload" style="color:red;"></i>
</button>
</div>
<div class="success-message">Test</div>
</div>
Вот файл сценария JS
$(document).on('click', '.delete_image_button',function(e) {
e.preventDefault();
var image_id = $(this).val();
$.ajax({
type: "POST",
url: '/deals/delete-image/'.image_id,
dataType: 'JSON',
success: function(data) {
console.log("inside success fuction", data);
html = "<div id='success-message'>The image id is " data "</div>";
$('.success-message').replaceWith(html);
}
});
});
Вот маршрут в файле маршрутов Laravel
Routes.php
Route::post('deals/delete-image/{image_id}','MainController@deleteImages');
Вот файл контроллера кода laravel
MainController.php
public function deleteDealImages($image_id) {
Log::info("inside deleteDealImages function in back end");
return $image_id;
}
Я получаю код состояния 405 с ответом на ошибку в виде
{
"message": "The POST method is not supported for this route. Supported methods: GET, HEAD.",
"exception": "Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException",
"file": "/var/www/vendor_portal/vendor/laravel/framework/src/Illuminate/Routing/AbstractRouteCollection.php",
"line": 117
}
Я пробовал много разных способов, но все равно продолжаю получать эту ошибку. Может кто-нибудь, пожалуйста, помочь мне с этим сценарием ?
Комментарии:
1. попробуйте очистить кэши (в частности, кэш маршрутов), но это приведет к их всем
php artisan route:clear amp;amp; php artisan view:clear amp;amp; php artisan config:clear amp;amp; php artisan cache:clear amp;amp; php artisan clear-compiled amp;amp; composer dump-autoload
Вам также может понадобиться токен «_token»: «{{ csrf_token() }}», как aparam2. @Cameron перепробовал все это, но все еще не работает. Кроме того, я запускаю запрос на публикацию без использования формы, но при нажатии кнопки.
3. маршрут php artisan:список видите ли вы там свой маршрут?
4. кроме того, вы находитесь на laravel 8? или 7 и ниже?
5.
url: '/deals/delete-image/'.image_id
, в js должен быть ` url: ‘/deals/delete-image/’ image_id` или синтаксис литерала шаблона. если вы добавитеRoute::post('deals/delete-image/{image_id?}','MainController@deleteImages');
знак вопроса после image_id в маршруте, это сделает параметр необязательным.
Ответ №1:
В вашем коде javascript в разделе URL ajax для объединения строки вы должны использовать» «, а не»».»
Ваш Код
$.ajax({
type: "POST",
url: '/deals/delete-image/'.image_id,
dataType: 'JSON',
success: function(data) {
console.log("inside success fuction", data);
html = "<div id='success-message'>The image id is " data "</div>";
$('.success-message').replaceWith(html);
}
});
Код, который вы должны написать
$.ajax({
type: "POST",
url: '/deals/delete-image/' image_id,
dataType: 'JSON',
success: function(data) {
console.log("inside success fuction", data);
html = "<div id='success-message'>The image id is " data "</div>";
$('.success-message').replaceWith(html);
}
});
Комментарии:
1. Если этот ответ правильный, можете ли вы проголосовать за этот ответ
2. Я попытался проголосовать, но я тоже не могу, так как моя репутация меньше, но я принял ваш ответ.