【问题标题】:Ajax send the data, but php doesn't recieveAjax 发送数据,但 php 没有收到
【发布时间】:2014-01-23 18:25:44
【问题描述】:

虽然我还在读 Nicholas C. Zakas 的书(在 4 天内阅读了 300 多页),同时我有一个小项目来为我们以后的大项目创建一个半自动化的文档生成器页面.它已经完成了一半,但现在我想为其提供更多功能,这需要我需要将 textareas 的值发送到 PHP,以便 PHP 可以更新 mysql,反之亦然,但现在不是问题。

问题: Ajax 成功,我收到成功消息,但 PHP 没有读取 POST。为什么?

我进行了研究,我阅读了 stackoverflow 主题和其他网站、phpmanual、w3school 示例的音调,但出了点问题。

基本 html 示例:

<form id="foo">
   <label for="bar">A bar</label>
   <input id="bar" name="bar" type="text" value="" />
   <input type="submit" value="Send" />
</form>

<div id="result"></div>
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script src="script.js"></script>

我为此找到的基本 ajax 调用(发送):

/* Attach a submit handler to the form */
$("#foo").submit(function(event) {

    /* Stop form from submitting normally */
    event.preventDefault();

    /* Clear result div*/
    $("#result").html('');

    /* Get some values from elements on the page: */
    var values = $("#foo").serialize();
    console.log("val: "+values);

    /* Send the data using post and put the results in a div */
    $.ajax({
        url: "ez.php",
        type: "POST",
        data: values,
        success: function(){
            $("#result").html('Submitted successfully');
        },
        error:function(){
            alert("failure");
            $("#result").html('There is error while submit');
        }
    });
});

简单的 PHP 用于测试我是否获得了该数据

<?php

   if(isset($_POST['bar']))
   {
       echo "hello " . $_POST['bar'];
   };

?>

所有三个文件都在同一个文件夹中。

我以后肯定会越来越深入地了解这个话题,只是现在我需要尽快完成这个小项目。我将成为前端开发人员,所以 php 部分不会等我,但现在我需要它进行测试,直到我可以与服务器端程序员交谈。我想确定将哪些变量和数据发送给他,以便他稍后处理。

提前致谢!

【问题讨论】:

  • 为什么你认为 PHP 没有收到这些值?你的 Javascript 永远不会对结果做任何事情。
  • 您应该检查您的网络标签并查看
  • 因为如果刷新我会得到一个空白页。在 Ajax 发送它应该发送的 POST 之后,不是吗?我的意思是如果刷新 php,我不应该看到结果吗?
  • 你的 PHP 脚本在调用时只是返回一些东西,而不是存储任何数据
  • 沃尔夫,我现在检查了!等待然后ajax发送数据,然后在php页面上,等待然后刷新网络选项卡并且帖子消失。就像它得到了数据,但页面仍然是空白的。

标签: php jquery ajax post send


【解决方案1】:

你怎么知道你的脚本没有收到数据?

将成功改为如下:

success: function(data){
        $("#result").html('Submitted successfully:' + data);
    },

您所做的只是说'如果收到响应而没有错误更新 div' - 您无法知道您的 php 脚本是否已成功运行(它已在您获得成功时运行)或不在时刻。

通过函数中的“数据”,您可以查看您的脚本是否已将信息传回。

试试上面的方法,让我们知道你的进展情况

为了清晰

当您访问它们时,PHP 脚本会运行一次 - 它们没有内存(除了固定变量,例如 $cheese = "yummy";

访问页面时(即使在运行脚本之后)看不到响应的原因是它有点愚蠢并且不记得你运行过它。

所以直接访问脚本是脚本去的

'哦 - 现在是表演时间,对吧.....err.....ok - 这个人给我发了'bar' - 不 好吧,在这种情况下,我不会做 if 语句中的事情 - 我的工作结束 - 在这里无事可做,我不会发回任何东西。'

试试这个:

更改$_POST['bar'] to $_GET['bar'];

然后转到脚本所在的 URL 并输入 http://yoururl.com/script.php?bar=terrence

您会注意到您现在得到了响应,因为您向脚本传递了它想要返回 true 的内容,并且执行 if 语句中的内容。

要使数据持久化,您需要将数据存储到数据库或文本文件中。

希望这很清楚!

【讨论】:

  • 我试过了:我在框中添加了“Norbert”并得到了这个:“提交成功:你好 Norbert”。基本上我不明白的是为什么我在 php 文件中看不到这个结果“hello Norbert”。 :) 所以因为我们想稍后使用它来上传到 mysql 或只是其他东西.. 我只是假设如果 $_POST['bar'] 可以工作,那么 echo 会将它打印到浏览器。
  • @ThePianist $_POST['bar'] 等于 'Norbert',是什么让你认为它不是?编辑:为什么它应该等于:"hello Norbert" ???
  • 也许我们误会了! :) 也许我应该更改问题的描述。我不想从 php 文件中接收数据,我知道该怎么做。我现在要做的是将数据提供给 php 文件以处理该数据。
  • @ThePianist 但这已经是您正在做的事情,使用 ajax 将值从 html 表单传递到 php 脚本。现在如果你需要存储这些数据,你应该使用数据库服务器端
  • @ThePianist GET 和 POST 只是传递数据的方法,您对传递的数据服务器端所做的事情与使用的方法无关。您也可以使用 GET 存储在数据库中。如果您不想关心使用的方法,您仍然可以使用 $_REQUEST[] 来处理两种情况php.net/manual/en/reserved.variables.request.php
【解决方案2】:

如果您在 Windows 上,请获取 Fiddler。这是 Microsoft 提供的免费数据包嗅探器。它可以让你看到介于两者之间的东西。您将能够看到套接字从浏览器看到的内容以及套接字从服务器接收到的内容。

http://msdn.microsoft.com/en-us/library/bb250446%28v=vs.85%29.aspx#ie_introfiddler_topic2

对于您正在做的事情来说,这可能有点矫枉过正,但我​​认为拥有出色的调试工具总是好的。它为您购买选择,并打开可能性。

那里也有其他人。而且我敢肯定还有 nix 工具可用。

【讨论】:

    【解决方案3】:

    我认为一切都是正确的,除了你从表单中传递任何值。只需替换此代码

    <form id="foo">
       <label for="bar">A bar</label>
       <input id="bar" name="bar" type="text" value="something" />
       <input type="submit" value="Send" />
    </form>
    

    我认为它会解决你的问题。并在js中添加更改这个小代码

    表格

    success: function(){
        $("#result").html('Submitted successfully');
    },
    

    success: function(result){
        $("#result").html('Submitted successfully'+result);
    },
    

    【讨论】:

      猜你喜欢
      • 2016-10-17
      • 1970-01-01
      • 1970-01-01
      • 2014-04-16
      • 2022-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-31
      相关资源
      最近更新 更多