【问题标题】:Sending form data with jQuery post method not working使用 jQuery post 方法发送表单数据不起作用
【发布时间】:2020-03-10 20:41:13
【问题描述】:

尝试通过 jQuery Ajax post 方法更新 SQL Server 中的删除标志。我不确定问题出在我的 PHP 还是 jQuery 代码上。当我按下删除按钮时,什么也没有发生,但网络开发工具并没有表明语法有任何问题。

这里是 HTML:

    <div class='dialog' id='editForm' title='Edit' >
        <form method='POST' id ='editFo' name = 'editFo' action='post' enctype='multipart/form-data'>

        </form>
    </div>`

这里是按钮的html:

    <button id="deleteFormbtn" >Delete</button>

这里是 jQuery 代码:

    $("#deleteFormbtn").click(function(){
       $.post ( "deleteRow.php", $("#editForm: input").serializeArray(), function(data){
            alert(data);
        });
    });`

这里是 PHP 代码:

`

require_once ('sql/connectionstring/connectionstring.php');
$conn = SQLServerConnection();  


if(isset($_POST['vendor'])){

    $loc_sql = "SELECT TOP 1 loc_id FROM <table> WHERE loc_name = ?";
    $parms = array($_GET['loc']);
    $loc = sqlsrv_query($conn, $loc_sql, $parms) or die (print_r ( sqlsrv_errors(), true));

    while ($q = sqlsrv_fetch_array($loc)){
        $loc_id = $q["loc_id"];
    }
    $username = $_POST['username'];
    $password = $_POST['password'];
    $comments = $_POST['comments'];
    $vendor_website = $_POST['website'];
    $vendor = $_POST['vendor'];


    $query = "UPDATE <table> SET <column> = '0' WHERE <column> = ?";

    $parms = $username;

    $result = sqlsrv_query($conn, $query, $parms) or die (print_r ( sqlsrv_errors(), true));

    sqlsrv_close($conn);

}
header('Location: <location>);

?>`

【问题讨论】:

  • 您是否在开发工具/网络选项卡中看到 POST 请求或控制台中出现任何错误?
  • 当我点击按钮时,控制台没有显示错误输出并且网络选项卡中没有任何反应
  • 我怀疑这是您的第一个问题。将您的按钮更改为&lt;button type="button" id="deleteFormbtn"&gt;Delete&lt;/button&gt;。因为页面正在重新加载,并且请求永远不会发送。
  • 我已经进行了更改,但网络选项卡中仍然没有发生任何事情。
  • $("#editForm: input") 是错误的选择器...你想序列化表单,所以使用这个选择器:$('#editFo')

标签: php jquery sql ajax post


【解决方案1】:
  • 您需要通过 AJAX 发布请求传递“供应商”,以便 PHP 在尝试访问 $_POST['vendor'] 时可以识别它
  • 您还需要处理“if(isset($_POST...) { .... }”未满足的情况,以便返回错误。
  • 更多地关注 PHP 部分,以 JSON 格式向您发送回复。 类似于:

    $data = /** 无论你在序列化什么 **/;

    header('Content-Type: application/json');

    回显 json_encode($data);

【讨论】:

  • 'vendor' 不是通过 editForm 输入传递的吗?这是我的数组元素之一。
  • 我在您发布的示例中看不到它。您能否在 html 部分发布更多信息。
  • 在所有情况下,PHP 部分都需要改进以提供正确的结果。
【解决方案2】:

您需要将type="button"添加到您的按钮,否则页面重新加载和请求将不会发送,因为它默认为“提交”。

<button type="button" id="deleteFormbtn" >Delete</button>

此外,您在 AJAX 请求中引用的是 div 而不是 form。您不需要 methodaction 属性,AJAX 会为您处理。发送整个表单,而不仅仅是input

<div class='dialog' id='editForm' title='Edit' >
  <form id ='editFo' name = 'editFo' enctype='multipart/form-data'>

  </form>
</div>

$("#deleteFormbtn").click(function(){
  $.post ("deleteRow.php", $("#editFo").serialize(), function(data){
    alert(data);
  });
});

【讨论】:

    猜你喜欢
    • 2018-10-13
    • 2011-10-09
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多