为什么jQuery.ajax()不发送任何数据?

时间:2019-01-11 15:33:50

标签: javascript php jquery ajax

请告诉我,有一种向数据库发送数据的表格。没有脚本,它可以正常工作,但是脚本没有任何反应。在控制台中-表单数据具有所有数据,第200条代码已到达,但未添加到数据库中。

PHP:

fgets

HTML:

<?php
    $data = $_POST;

    if (isset($data['add'])) {
        $posts = R::dispense('posts');      
        $posts->head = $data['head'];
        $posts->desc = $data['desc'];
        R::store($posts);
    }
?>

JS:

<form method="POST" id="FormID">
    <input type="text" name="head" required />
    <input type="text" name="desc" required />

    <button type="submit" name="add">Добавить</button>

2 个答案:

答案 0 :(得分:1)

您说:

if (isset($data['add'])) {

因此,代码仅在数据中add时才执行任何操作。

<button type="submit" name="add">Добавить</button>

add是一个提交按钮。提交表单时,它将包含在数据中。

data: $("#FormID").serialize(),

您没有提交表单。 jQuery serialize 不包括提交按钮,因为当您不提交表单时,它们不是成功的控件。

使用其他某种机制来确定是否有数据要处理(例如headdesc的存在。

答案 1 :(得分:0)

  1. 您忘记了表单的action
  2. 为什么不简单地使用$data['name']而不是R::dispense
  3. 如果您要执行POST请求,为什么不使用$.post()

您需要的是这些

PHP代码:

<?php
    $data = $_POST;

    if (isset($data['add'])) {
        if(isset($data['head']) AND !empty($data['head']) AND isset($data['desc']) AND !empty($data['desc'])) {
            $head = htmlspecialchars($data['head']);
            $desc = htmlspecialchars($data['desc']);
            echo "Hello from server";
        }
        else {
            echo "Please fill the form";
        }
    }
?>

HTML:

<form method="POST" id="FormID" action="path_to_php_file.php">
    <input type="text" name="head" required />
    <input type="text" name="desc" required />
    <button type="submit" name="add">Добавить</button>
</form>

JS:

<script>
    $("#FormID").submit(function(e)
    {
        e.preventDefault();
        var form = $(this),
            url = form.attr('action');

        var data = {};

        // To have post paramaters like
        // { 'head' : 'Head value', 'desc' : 'Desc value' }
        $.each(form.serializeArray(), function(i, field) {
            data[field.name] = field.value;
        });

        $.post(url, data, function(Responses) {
            // Will write "Hello from server" in your console
            console.log(Responses);
        });
    });
</script>