首页 > 解决方案 > 调试 AJAX 表单

问题描述

我有一个.php带有 HTML 代码的文件,在其中我用 AJAX 调用另一个带有 html 文件的 php。表单。显然,这种形式的某些东西是错误的,或者是它之后的查询。问题是:

在这种情况下如何调试我的代码?

文件1.php

    $(".edit-post").click(function(){
        var postid = $(this).attr("id");
        $.ajax({
            type: "GET",
            url: "/admin/EditProductForm.php/",
            dataType: "html",
            data: {
                ajaxpostid: postid
            },
            success: function(data){
               $('#post').html(data);
            }
        });
        $("#post").show();

    });

编辑ProductForm.php

<?php
$ID = $_GET["ajaxpostid"];
$post = GetProduct($ID);
if(!empty($_POST)){
...query
}
?>
<html>
  <form>
  .
  .
  .
 </form>
</html>

标签: phphtmlajaxformsdebugging

解决方案


首先要了解的是,虽然您的 HTML 和 Javascript 可能已经通过 PHP 传送到工作站,但它现在运行在一个完全独立的环境中,根本无法访问 PHP。

您在服务器上运行的 PHP 正在服务器环境中运行,并且无法访问在浏览器中运行的 HTML 和 JavaScript。

应用程序的两个部分通过在提交表单时将数据作为 aGETPOST请求的一部分发送,或者通过 AJAX 发送和接收消息来进行通信。在一个页面中使用这两种方法是不寻常的。

因此,您可以分别调试这两个部分。

转向您的代码:

单击按钮时会触发您的 AJAX 代码。在没有任何其他属性的情况下,按钮也会触发一个submit. 这就是导致页面重新加载的原因。由于您使用 AJAX 更新您的页面,您不希望它重新加载,所以停止它preventDefault();

$(".edit-post").click(function(event){   // add the event parameter here
    event.preventDefault();              // Prevent the default action - the submit.
    var postid = $(this).attr("id");
    ...

完成此操作后,您可以使用浏览器工具的“网络”选项卡来查看消息、查看正在发送的内容以及收到的响应。

事情的服务器端有点尴尬,但echo在适当的地方添加语句可以在调试时提供有用的输出。请注意,您不需要 AJAX 脚本来调试服务器端 - 一个带有正确字段的简单 HTML 表单就可以了。如果您正在使用GET,您甚至可以在命令行上手动键入 URL 和查询字符串并观察结果。

但是,在您的代码中存在一个基本缺陷。

在您的 AJAX 代码中,您将请求类型设置为GET( type: "GET",)。在您的 PHP 脚本中,您正在寻找$_GET["ajaxpostid"];,这没关系,但随后您开始查看$_POST数组,该数组将为空,因为您的 AJAX 调用使用了GET

现在在这一点上,没有足够的代码来清楚你想要实现的目标。如果您的 SQL 查询只是检索数据以填充编辑表单,那么GET is an appropriate method, and you shouldn't be looking at the $_POST` 数组。

但是,您发布的代码表明该EditProductForm.php代码正在生成 HTML 以执行编辑。如果是这种情况,您根本不需要 AJAX,您可以只submit使用File1.php. 另一方面,如果您希望页面在不刷新的情况下转换为编辑表单,则File1.php需要创建编辑表单并合并服务器发送的数据,您EditProductForm.php不应该这样做。


推荐阅读