Ошибка 405 Ajax POST

Так что в основном моя главная HTML-страница имеет 3 кнопки, с каждой из которых связано различное фоновое изображение. Я пытаюсь передать источник этого изображения через сообщение ajax в мой файл Php, чтобы записать в текстовый файл.

Мой JS:

// MAIN
$(function() {

$(".artButton").click(function(){
var artId = $(this).attr("id");
var source = $("#"+artId).css("background-image").replace(/^url\(['"](.+)['"]\)/, '$1');


// DEBUG
console.log(source) //example: http://localhost/crowd.jpg
console.log(typeof source)//example: string


$.ajax({
type: 'POST',
url: 'writeToTxt.php',
data: source,
success: function(response) {
console.log("Succes");
}
});
});
});

Мой файл Php:

<?php


$my_file = 'toExpose.txt';
$handle = fopen($my_file, 'w') or die('Cannot open file:  '.$my_file);
$data = $_POST['data'];
fwrite($handle, $data);

?>

приводя к следующей ошибке на консоли Chrome:
405 Ajax Post error

Обратите внимание, что я не эксперт в программировании … Подробнее о спектакле «Мне нужно что-то, поэтому я пытаюсь сам это кодировать». Многое из этого не может быть лучшей практикой с точки зрения кодирования, но мне просто нужно, чтобы это работало, как я и ожидаю!
Большое спасибо за помощь !

НОТА: Все работает на localhost

ОБНОВИТЬ:
Это HTML-код страницы:

<html>

<link href="style.css" rel="stylesheet" type="text/css"/>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">


<body>
<header class="navbar">
<div class="container">

<h1>Welcome to oneFRAME</h1>

<nav class="navbar navbar-expand-lg navbar-dark bg-dark">

<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>

<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav mr-auto">
<li class="nav-item">
<a class="nav-link" href="Home.html">Home <span class="sr-only">(current)</span></a>
</li>
<li class="nav-item active">
<a class="nav-link" href="#">Library</a>
</li>

<li class="nav-item">
<a class="nav-link" href="LibraryV2.html">Library v2</a>
</li>

<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Dropdown
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="#">About</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Contact</a>
</div>
</li>

</ul>
<form class="form-inline my-2 my-lg-0">
<input class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search">
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
</form>
</div>
</nav>
</div>
</header>



<button id="choice1" class="artButton" type="button">Nature</button>
<button id="choice2" class="artButton" type="button">Art</button>
<button id="choice3" class="artButton" type="button">Crowd</button>


<script src="jquery-3.3.1.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
<script src="main_temp.js"></script>

</body>

</html>

0

Решение

Ошибка HTTP 405 указывает на проблему с вашим скриптом и / или вашим веб-сервером. Ошибка означает, что вы пытаетесь вернуть обратно файл, который не имеет необходимых разрешений на сервере для получения информации Post из другого сценария.

0

Другие решения

Попробуйте передать данные в объект как

$.ajax({
type: 'POST',
url: 'writeToTxt.php',
data: {data: source},
success: function(response) {
console.log("Succes");
}
0

Попробуй это

$(function() {

$(".artButton").click(function(){
var artId = $(this).attr("id");
var source = $("#"+artId).css("background-image").replace(/^url\(['"](.+)['"]\)/, '$1');


// DEBUG
console.log(source) //example: http://localhost/crowd.jpg
console.log(typeof source)//example: string


$.ajax({
type: 'POST',
url: 'writeToTxt.php',
data: {source:source},
success: function(response) {
console.log("Succes");
}
});
});
});
0

Вы получаете сообщение об ошибке, потому что у вас нет разрешения на запись в каталог htdocs или www.

  • Изменить разрешение папки с помощью sudo chmod -R 777 /directory
  • Измените ваш метод ajax POST на GET (иногда не работает).

Не уверен, но я сомневаюсь, что ваш путь должен быть Http: //localhost/example/index.php

Обновленный код:

<!DOCTYPE html>
<html>
<head>
<title></title>
<script type="text/javascript" src="jquery.min.js"></script>

</head>
<body>

<button id="choice1" class="artButton" type="button" style="background-image:url('http://localhost/Veridocglobalportal2/veridocedu/public/img/edu-logo.png');">Nature</button>
<button id="choice2" class="artButton" type="button">Art</button>
<button id="choice3" class="artButton" type="button">Crowd</button>
<script type="text/javascript">
// MAIN
$(function() {

$(".artButton").click(function(){
var artId = $(this).attr("id");
var source = $("#"+artId);
switch (artId) {
case "choice1":
var source = "http://localhost/crowd.jpg";
break;
case "choice2":
var source = "http://localhost/people.jpg";
break;
case "choice3":
var source = "http://localhost/alone.jpg";
break;
}


// DEBUG
console.log(source) //example: http://localhost/crowd.jpg
console.log(typeof source)//example: string

$.ajax({
type: 'POST',
url: 'writeToTxt.php',
data: {"data":source},
success: function(response) {
console.log("Succes");
}
});
});
});
</script>

</body>
</html>

writeTotxt.php

   <?php
$cwd=getcwd();
$data = $_POST['data'];
$myfile = file_put_contents("$cwd/logs.txt", $data.PHP_EOL,FILE_APPEND | LOCK_EX );
0

Вы получаете ошибку на стороне клиента.
4.x.x — все об ошибках на стороне клиента.

Измените ваш запрос Ajax, как это —

$.ajax({
type: 'POST',
url: 'writeToTxt.php',
data: 'name=xxx&address=xxxx',
success: function(response) {
console.log("Succes");
}
});
-1
По вопросам рекламы [email protected]