Выполнить функцию php через ajax

я создал форму через которую можно создавать новые страницы для сайта. Нужно вызвать функцию через сервер и я использую ajax. Проблема в том что этот код не выполняется, я даже не знаю где может быть ошибка. Вот форма

<form name="form" action="" method="post">
    Name <input type="text" name="nameof" id="name" value="yourname"> 
    Text <input type="text" name="dataof" id="text" value="<b>your text</b> hello <i> example </i>">
    <button onclick="create()" name="select">post</button>

</form>

<script>

    function create () {
        $.ajax({
            url:"function.php",    
            type: "post",  
            dataType: 'json',
            data: {name: "nameof", data:"dataof"}
        });
    }


</script>

Файл function.php

<?php
  $name = $_POST['name'];
  $data= $_POST['data'];
  $fp = fopen($name.'.html', "w+");
  fwrite($fp, $data);
  fclose($fp); ?>

Прошу помочь, буду благодарен


Ответы (2 шт):

Автор решения: Serghei Leonenco

Попробуйте исправить ваш HTML код следуюшим образом предпологая что файл находиться в корне проекта:

<form id="myForm" name="form" action="/" method="post">
    Name <input type="text" name="nameof" id="name" value="yourname"> 
    Text <input type="text" name="dataof" id="text" value="<b>your text</b> hello <i> example </i>">
    <button onclick="create()" name="select">post</button>

</form>

<script>
function create () {
        $.ajax({
            url:"function.php",    
            type: "post",
            data: $('#myForm').serialize()
        });
    }
</script>

Метод .serialize () создает текстовую строку в стандартной записи с кодировкой URL.

Update: Или следующим образом:

<form id="myForm" name="form" action="/" method="post">
        Name <input type="text" name="nameof" id="name" value="yourname"> 
        Text <input type="text" name="dataof" id="text" value="<b>your text</b> hello <i> example </i>">
        <button onclick="create()" name="select">post</button>
    
    </form>
    
    <script>
    function create () {
            $.ajax({
                url:"function.php",    
                type: "post",
                data: $('#myForm').serialize(),
                success: function(data){
                    console.log(data);
                }
            });
        }
    </script>

Файл function.php

<?php
$name = $_POST['name'];
$data = $_POST['data'];
$flag = "done";
$fp = fopen($name.'.html', "w+");
if($fp && $name && $data){
    fwrite($fp, $data);
} else {
    $flag = "fail";
}  
fclose($fp); 

return $flag;
?>

При выполнении и записи вы получите в консоли вашего браузера ответ "done", и напротив "fail", если у вас что то пошло не так в файле php.

→ Ссылка
Автор решения: fedinovmaksim

Итак, сегодня наконец я разобрался как завести данный код. Я просто убрал форму, оставит только два label. И исправил date: $('#myForm').serealize() на date: {name:$('#name').val(), text:$('#text').val(), досихпор не знаю почему .serealize() не работал.

→ Ссылка