【问题标题】:How do I debug jQuery.post() with JSON as dataType?如何使用 JSON 作为数据类型调试 jQuery.post()?
【发布时间】:2020-12-03 13:29:05
【问题描述】:

我尽量避免在这里提问,一直使用搜索功能,但我真的找不到解决问题的方法:

我正在使用 jQuery 执行一个 PHP 脚本,该脚本为我提供值,然后我用它来更改我的 HTML 元素的内容。我的代码如下所示:

  $.post(
    "classes/Damage.php", {
        id: id,
        action: action
    },
    function(data, status) {
        console.log(data);
        $("#element1").text(data.a);
        $("#element2").text(data.b);
},
"json");

我的 PHP 看起来像这样:

  $data = array("a" => "info1", "b" => "info2");
  header('Content-type: text/javascript');
  echo json_encode($data);

我遇到的问题是当我的 PHP 脚本无法正常工作时,jQuery 代码无法执行,我必须手动搜索错误。如何正确调试?

【问题讨论】:

  • 标题应该是application/json 而不是text/javascript。您能否举例说明您正在尝试解决哪些问题?
  • 如果你的 id 和 action 变量是好的,然后尝试转储 post 数据并死在 php 文件中,看看你是否得到你的变量。如果他们没问题,那么确保来自 php 文件的响应是好的。您还可以在您的 post 方法中添加 done() 和 fail(),如果 php 失败,您可以在 jQuery 中优雅地处理它

标签: php jquery json ajax debugging


【解决方案1】:

欢迎来到 Stackoverflow,

首先,您可以在触发 ajax 时使用其他处理函数。
这是我使用的函数的示例:

var sendRequest = function () {

[ ... code goes here ]

$.ajax({
    url: "ajax/saveForm.php",
    data: {
        'repoSelector': repositoryName,
        'filepath': fileName,
        'name': autor,
        'client': kunde,
        'adr': adr,
        'adr_date': datum,
        'communicated': communicated
    },
    dataType: 'json',
    type: 'POST'
}).done(function (response) {

    [ ... response was alright , try json-decode the response]

}).fail(function (jqXHR) {

    [ ... yikes! something went awry ]

});

[ .. other stuff happening ]

}

您应该看到您首先应该调用 $.ajax() 而不是 $.post()。我告诉你这是因为它是我们公司事实上的标准,但它应该只是一个更好阅读的电话后。请注意 ajax 调用中的 type:post 提示,您也可以在此处编写 type:get,因此您实际上不需要对函数进行太多更改。

尝试使用此脚本重建您的帖子。

接下来是如何在使用 ajax 时调试东西:

如果您在浏览器中按 F12,您应该会找到一个名为“网络”的选项卡,在这里您可以看到实际执行的脚本及其状态代码。执行后您很可能会在此处找到您的脚本,如果您单击它,您可以看到您的 php 脚本的响应。但是,如果这个 answere 恰好是空的,那么您首先就会有迹象表明您做错了。

此外,您可以看到我的 ajax 已经有一个失败处理程序,并且在最好(或最坏,取决于 ^^)的情况下,当请求失败时,您的函数会跳转到这里。

PHP 错误消息也会出现在此处,例如失败的数据库查询,尽管向每个用户输出错误消息等内容并不是一个很好的做法。最好写入日志文件,但这超出了此答案的范围。

希望能帮到你

【讨论】:

  • $.post 只是$.ajax 的简写,type 设置为post,所以使用它本身并没有什么问题。
  • 好提示。我不确定 fail 和 done 函数是否可以与它一起使用,因此像这样调用的tipp......此外,这是多年来的“正常”做法。如果这能澄清它,我可以编辑答案
猜你喜欢
  • 1970-01-01
  • 2019-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-08
  • 1970-01-01
  • 2012-12-04
  • 2012-04-11
相关资源
最近更新 更多