Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我的ajax调用只工作了一次,但除非我刷新页面,否则它不会再次工作_Php_Jquery_Ajax - Fatal编程技术网

Php 我的ajax调用只工作了一次,但除非我刷新页面,否则它不会再次工作

Php 我的ajax调用只工作了一次,但除非我刷新页面,否则它不会再次工作,php,jquery,ajax,Php,Jquery,Ajax,我正在尝试使用Ajax创建一个表单。这是我试图输入的html部分 <form class="col s12"> <div class="row"> <div class="input-field col s6"> <i class="material-icons prefix">mode_edit</i> <textarea

我正在尝试使用Ajax创建一个表单。这是我试图输入的html部分

 <form class="col s12">
        <div class="row">
            <div class="input-field col s6">
                <i class="material-icons prefix">mode_edit</i>
                <textarea id="icon_prefix2" class="materialize-textarea" name ="discussion"></textarea>
                <input type="hidden" name="user" value="<?php echo $_SESSION['userid'];?>">
                <input type="hidden" name="id" value="<?php echo(rand(1000,99999)); ?>">
                <input type="hidden" name="date" value="<?php echo date("d.m.Y"); ?>">
                <input type="hidden" name="time" value="<?php echo date("h:i:s"); ?>">
                <label for="icon_prefix2">Start your discsussion</label>
                <input type="submit" class="btn waves-effect waves-light right" value="post">
            </div>
        </div>
    </form>
这是将值存储在DB中的php代码:

<?php

session_start();


include_once('include/config.php');

$conn = config();

$uname = $_POST['user'];
$uid = $_POST['id'];
$val = $_POST['discussion'];
$date = $_POST['date'];`enter code here`
$time = $_POST['time'];

if (!$conn) {
$msg = "connection failed";
die($msg);
} else {
$query = "INSERT into cardiocase (id,uid,val,date,time) VALUES 
(?,?,?,?,?);";
$stmt = $conn->prepare($query);
$stmt->bind_param('sssss',$uid,$uname,$val,$date,$time);

if($stmt->execute()){
    echo "success";
}else{
    echo "fail";
}
$stmt->close();

}

第一次存储该值。但是在成功消息之后,当我再次尝试输入时,它只是说已成功发布,但当我检查DB时,值不在那里。如果我刷新页面并再次尝试存储它。

这样改进代码:

<form class="col s12">
    <div class="row">
        <div class="input-field col s6">
            <i class="material-icons prefix">mode_edit</i>
            <textarea id="icon_prefix2" class="materialize-textarea" name ="discussion"></textarea>
            <label for="icon_prefix2">Start your discsussion</label>
            <input type="submit" class="btn waves-effect waves-light right" value="post">
        </div>
    </div>
</form>
删除隐藏字段

然后在php文件中:

 <?php
session_start();


include_once('include/config.php');

$conn = config();

$uname = $_SESSION['userid'];
$uid = echo(rand(1000,99999));;
$val = $_POST['discussion'];
$date = date("d.m.Y");
$time = date("h:i:s");

if (!$conn) {
$msg = "connection failed";
die($msg);
} else {
$query = "INSERT into cardiocase (id,uid,val,date,time) VALUES 
(?,?,?,?,?);";
$stmt = $conn->prepare($query);
$stmt->bind_param('sssss',$uid,$uname,$val,$date,$time);

if($stmt->execute()){
    echo "success";
}else{
    echo "fail";
}
$stmt->close();

}

使用preventDefault可避免表单提交

$('body').on("click", '.btn', function (e) {
        e.preventDefault(); // prevent default functionality
        // run AJAX

 });
看起来JS在什么地方出错了 用于查看AJAX结果是什么

 $.ajax({
            type: 'post',
            url: 'cardiosubmit.php',
            data: $('form').serialize(),
            success: function () {
                alert('successfully posted')
            },
            complete: function (data, textStatus) {
                console.log(JSON.stringify(data));
                console.log(textStatus);
            }
        });
使用以下代码 更改HTML帖子中的ur按钮

用这个更新js代码

`$.trigger-submit.offclick; $.trigger-submit.onclick,函数{ $.ajax{ 键入:“post”, url:'cardiosubmit.php', 数据:$'form'。序列化, 成功:功能{ 警报“已成功发布” }, 错误:函数{ 警告“错误” }

    });

}“

问题在于这一行

<input type="hidden" name="id" value="<?php echo(rand(1000,99999)); ?>">

试试这个!!!

事实上我想提交表单。避免表单提交有什么用。但我还是尝试了这个。但仍然是相同的问题$'form'。serialize已经模拟表单提交您不需要提交表单,只需在单击事件时运行它即可。编辑我的答案以调试问题更好地查看服务器返回的是iudcardiocase DB中唯一的字段?我想您可能有兴趣从PHP获得响应:在页面顶部添加error_reportingE_ALL;ini_setdisplay_errors,1;,并在JS中使用PHP echo->success:function data{alertdata}+error:function request,status,error{alertrequest.responseText;}表中的“uid”“id”是主键井,您的隐藏输入在此处无效,请直接在php文件中生成这些值。了解了thanx:Dor只需在php文件中生成id。此字段在此处无效。同意,您可以在数据库中为表生成自动增量id
<input type="hidden" name="id" value="<?php echo(rand(1000,99999)); ?>">
$(function () {

    $('form').on('submit', function (e) {

        e.preventDefault();

        //Generate random id for very ajax request.
        $("[name='id']").val(Math.floor(Math.random() * 100));

        $.ajax({
            type: 'post',
            url: 'cardiosubmit.php',
            data: $('form').serialize(),
            success: function () {
                alert('successfully posted')
            },
            error: function () {
                alert('error')
            }

        });

    });

});
   <form action="cardiosubmit.php" class="col s12" id="myfrm" method="post" name="myfrm" >     
<div class="row">
    <div class="input-field col s6">
        <i class="material-icons prefix">mode_edit</i>
        <textarea id="icon_prefix2" class="materialize-textarea" name ="discussion"></textarea>
        <label for="icon_prefix2">Start your discsussion</label>
        <input type="submit" class="btn waves-effect waves-light right" value="post">
    </div>
</div>   
</form>
 <script type="text/javascript">   
 var frm = $('#myfrm');   

frm.submit(function (e) {

    e.preventDefault();

    $.ajax({
        type: frm.attr('method'),
        url: frm.attr('action'),
        data: frm.serialize(),
        success: function (data) {
            console.log('Submission was successful.');
            console.log(data);
        },
        error: function (data) {
            console.log('An error occurred.');
            console.log(data);
        },
    });
});