【问题标题】:Ajax post returns empty arrayAjax post 返回空数组
【发布时间】:2020-06-23 13:33:56
【问题描述】:

我有一个非常简单的带有 jquery 函数的 php 页面

<script type="text/javascript">
    $(document).ready(function() {
        $.ajax({
            url: "test.php",
            type: "POST",
            data: {
                myvar: 1,
            },
            success: function(result) {
                console.log("it works");
            }
        });
    });
</script>

我的 AJAX 功能应该在文档准备好后立即触发。我的 test.php 只显示了我的$_POST

<?php
    var_dump($_POST);
    die();

什么都没有发生。我应该去 test.php 看看 var_dump。如果我有一个按钮并在单击时启动 AJAX 功能,它就可以工作,但不是那样......不可能这样做吗?

【问题讨论】:

  • 您观察到的具体问题是什么? AJAX 成功处理程序中的 result 变量包含什么? (我什至看不到您的代码在哪里观察到该值...)在浏览器的调试工具中,服务器具体返回了什么?
  • 应该这样工作
  • 您是否在 devtools 的网络选项卡中查看此结果?
  • @Thbwun:您在哪里/如何具体观察到这个结果? (代码从不引用result,而只是将文字字符串记录到控制台。)我无法复制显示的代码描述的结果。
  • @Thbwun:关于更新后的问题......“什么都没有发生”有点不切实际。 某事发生了,只是观察什么。浏览器的开发控制台上是否有任何错误或警告?在浏览器的调试工具中,在网络选项卡上,是否发出了 AJAX 请求?如果是这样,服务器的响应是什么?如果没有,使用浏览器的脚本调试器,在 JavaScript 代码的第一行放置一个断点并重新加载页面,该代码是否被执行?将error 回调添加到$.ajax(),是否调用了该回调?

标签: javascript php jquery json ajax


【解决方案1】:

由于您期望在后端部分 $_POST 您能做的最好的就是使用

FormData API

jQuery(function($) {

  // Your object
  const data = {
    myvar: 1,
    foo: "foo",
  };

  // Create FormData from Object
  const FD = new FormData();
  Object.entries(data).forEach(([prop, val]) => FD.append(prop, val));


  $.ajax({
    url: "test.php",
    type: "POST",
    processData: false, // https://api.jquery.com/jquery.ajax/
    data: FD, // pass the formData and enjoy with $_POST in PHP
    success: function(result) {
      console.log("it works", result);
    }
  });

});

【讨论】:

    【解决方案2】:

    我使用如下数据类型测试您的代码:

    ajax 页面:

      $(document).ready(function() {
            $.ajax({
                url: "test.php",
                type: "POST",
                dataType: 'json', //add that line
                data: {
                    myvar: 1,
                },
                success: function(result) {
                console.log(result);
                    console.log(result['name']);
                }
            });
        });
    

    【讨论】:

    • "dataType (default: Intelligent Guess (xml, json, script, or html))" Source: api.jquery.com/jquery.ajax
    • @RokoC.Buljan 我不明白,如果你不使用数据类型就不行。
    • 为什么你认为它不起作用? jQuery 将{ 视为data 将其视为JSON
    • 我可能会怀疑,Tbhwun 没有在 devtools 的网络选项卡上查看它
    • @RokoC.Buljan 我认为问题出在输出上,事实上,由那些提出问题的人在本地测试给定的代码是行不通的,而是使用数据类型,一切都可以。
    猜你喜欢
    • 1970-01-01
    • 2019-01-31
    • 1970-01-01
    • 1970-01-01
    • 2015-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-01
    相关资源
    最近更新 更多