【问题标题】:AJAX isn't setting a PHP $_POST varibale so it's returning as 'Undefined'AJAX 没有设置 PHP $_POST 变量,因此它返回为“未定义”
【发布时间】:2018-03-07 11:15:52
【问题描述】:

我是 AJAX 新手,不擅长 PHP。我正在尝试使用 JQuery $.AJAX 函数简单地向我的 PHP 页面发送一个说“Hello”的字符串。到目前为止,我已经成功让 AJAX 将信息发送到页面并将其记录在控制台中,但数据没有存储到 POST 变量中。

请记住,我来这个论坛寻求帮助并不是偷懒,但我别无选择,因为我已经搜索了大约 2 天来解决这个问题,但没有找到任何有用的东西。

这是我的 HTML (order.html) - 这不是我的全部 HTML,但它是您需要的全部):

<html>
    <body>
        <form method="POST">
            <button id="order-btn" type="submit" formaction="PHP/sendMail.php">Order</button>
        </form>
        <!-- JavaScript/JQuery links -->
        <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
        <script type="text/javascript" src="JS/order.js"></script>
    </body>
</html>

这是我的 JavaScript(order.js - 再一次,我只提供必要的代码)

$("#order-btn").click(function() {
    var txt = "Hello!";
    $.ajax({
        url: "PHP/sendMail.php",
        type: "POST",
        data: {data: txt},
        dataType: "html",
        asyc: true,
        success: function(data){
            console.log(data);
        },
        error: function (xhr, ajaxOptions, thrownError) {
            alert("ERROR:" + xhr.responseText+" - "+thrownError);
        }
    });
});

这是我的 PHP(sendMail.PHP - 我只提供必要的代码)

<?php
if(isset($_POST['data'])) {  
    $data = $_POST['data'];
    echo $data;
} else {
    echo "Failed to grab data.";    
}

澄清一下,在我的实际代码中,URL 是我网站页面的完整 URL。

如果您想查看该网站以更好地了解我需要此功能的工作方式和原因,请在 cmets 中告诉我。

更新和解决方案:

从我收到的帮助中,我现在了解到 AJAX 只会更新当前页面上的信息(因此,例如,如果您在 index.html 上有 AJAX 功能,那么您只能在该页面上运行 AJAX 而不能跨页面传输信息)

为了解决我的问题,我停止将用户发送到 sendMail.php 页面,而是在 $.ajax 成功方法中更改了我当前所在页面 (order.html) 的 HTML 内容。

这是更新后的 JavaScript 代码:

$("#order-btn").click(function() {
                var txt = "Hello!";
                $.ajax({
            url: "order.html",
            type: 'POST',
                data: {data: txt},
            dataType: 'html',
            success: function(data){
                        if(parseInt(data)!=0) {
                            $("body").html(data);
                        }
            },
            error: function (xhr, ajaxOptions, thrownError) {
            alert("ERROR:" + xhr.responseText+" - "+thrownError);
            }
        });
    });

我要感谢所有帮助过的人:)

【问题讨论】:

  • 这个按钮#order-btn 是表单提交按钮吗?
  • 抱歉,由于某种原因,我的 HTML 已被删除。订单按钮位于使用 POST 方法的表单中,并且该按钮有一个指向 sendMail.php 页面的表单操作

标签: javascript jquery html css ajax


【解决方案1】:
$.ajax({ //create an ajax request to load_page.php
type: “POST”,
url: “load-page.php”,
data: {page:url}, //with the page number as a parameter
dataType: “html”, //expect html to be returned
success: function(msg){

if(parseInt(msg)!=0) //if no errors
{
    $(‘#pageContent’).html(msg); //load the returned html into 
    pageContet
    $(‘#loading’).css(‘visibility’,’hidden’);//and hide the rotating    
    gif
}
});

像上面的例子 load-page.php 被调用,所以返回的数据将显示在 pageContent 中,这是一些 div 等的 id 并且这个 div 不在 load-page.php 这个 div 是从哪里此 ajax 请求已发送。

也许会有意义 参考链接:Reference Link!

【讨论】:

  • 您可以编辑以前的答案,而不是添加新的答案。
  • 我不太明白你在说什么。你介意更详细地解释一下吗?我也尝试使用这段代码,但我得到了一堆错误。谢谢你的时间:)
  • 刚刚用我的代码切换了一些东西,我已经设法让它工作了。我所做的是使用新数据更改页面内容,而不是将用户带到一个全新的页面。谢谢你的帮助,你已经解决了我的问题。我将更新原始问题中的代码,希望能帮助遇到此问题的其他人。
【解决方案2】:

不是这样的,因为你调用了sendMail.php这个文件,返回的数据将在调用它的页面中可用。

假设通过按钮单击页面 A 您调用了 sendMail.php,因此 ajax 响应返回到页面 A 而不是 sendmAil.php。

【讨论】:

  • 你知道这就是我的想法,因为我是 AJAX 的新手,我不确定重新加载/更改页面是否会影响数据,因为我虽然 AJAX 将它发送到服务器,但它会是存放在那里直到使用。你介意向我解释一下我可以将此信息发送到我的 PHP 并将其存储为变量的方法吗? - 感谢您的评论
【解决方案3】:

首先,保证您的 API 正常工作。使用 API 工具链,例如 postmaninsomnia

如果您的 api 正在返回您想要的内容,那么您将转到您的 javascript 代码,因为我在您的代码中看不到任何问题。我什至使用了你的代码并且工作了。

【讨论】:

  • 你说我的代码对你有用。这是否意味着 PHP 也将数据存储为变量并将其显示在页面上,还是只是在控制台中工作?
  • 就在控制台上。但是从php返回。
【解决方案4】:

然后使用会话

session_start(); //at the top
$_SESSION['mydata'] = $data; // something like it

但据我所知,有必要刷新页面以使会话正常工作。请尝试一下

【讨论】:

  • 我已经尝试过了,但它不起作用,因为 AJAX 不会在页面之间发送数据,它只是将信息更新/发送到功能所在的当前页面。谢谢你的时间:P
猜你喜欢
  • 2014-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-18
  • 1970-01-01
  • 1970-01-01
  • 2021-01-10
相关资源
最近更新 更多