【问题标题】:Trouble Understanding $.ajax() Parametres to get PHP Variable难以理解 $.ajax() 参数以获取 PHP 变量
【发布时间】:2016-02-28 08:49:37
【问题描述】:

昨天I asked about connecting HTML, Javascript and PHP with sessions

有人建议我使用 $.ajax(),但我无法弄清楚如何让它工作。

首先我有一个 HTML 文件:

<?php session_start(); ?> <!-- This is on the first line of the page -->
...
<form id="formexample" method="post" action="cart.php">
<select name="formexample1">
    <option value="1">Option 1</option>
    <option value="2">Option 2</option>
</select>
<select  name="formexample2">
    <option value="1">Option 1</option>
    <option value="2">Option 2</option>
</select>
<button type="button" onclick="addToCart()">Add to Cart</button>
</form>
<div class="test"></div>

我在一个单独的、包含的 PHP 文件中有这个:cart.php

<?php   

session_start(); 
$PHPtest = 1;
echo json_encode($PHPtest);
/* 
$_SESSION['cart'][$_POST['formexample1']] = $_POST['formexample1'];
$_SESSION['cart'][$_POST['formexample1']][$_POST['formexample2']] = [$_POST['formexample2']] 

*/
?>

我的目标是在我的 Javascript 中访问 $_SESSION 变量,但目前我正在尝试让它首先与 $PHPtest 一起工作。

在 Javascript 中我有这个:

function addToCart()
{
    var test;
    $.ajax(
    {
        url:"cart.php",
        type:"post",
        data: data,
        success:function(PHPtest) 
        {
            test = $.parseJSON(PHPtest);
            console.log(test); //sends the response to your console
        },
        error:function() 
        {
            console.log("Error");
        }
    });
    alert(test);
}

要了解我是如何做到这一点的,请参阅昨天的帖子(链接在页面顶部)和 Josh S 的回答下的讨论。我试图让 $.ajax() 工作,但没有成功。 我一直在查看在线示例并尝试编写相同的格式,但我尝试的任何方法似乎都不起作用。

提前致谢。

编辑:

这就是我现在拥有的:

    var test;
    $.ajax(
    {
        url:"cart.php",
        type:'post',
        data: 'test',
        datatype: 'json'
        success:function(PHPtest) 
        {
            test = $.parseJSON(PHPtest);
            alert(test);
            console.log(test); //sends the response to your console
        },
        error:function() 
        {
            console.log("Error");
        }
    });

编辑 2

我终于想出了如何将 $PHPtest 发送到 Javascript。我写道:

$.get( "cart.php", function( PHPtest ) {
test = PHPtest;     
alert(test);
        });

我的 PHP 仍然存在:

<?php   

/* session_start();*/ 
$PHPtest= "test";
echo json_encode($PHPtest);
?>

它适用于 PHPtest 的各种值。据我所知,在“echo”和“$PHPtest”之间取出“json_encode”没有区别。

编辑 3

这是我现在拥有的。

HTML: 这是在文件“bookings.php”中。 ... 选项1 选项 2 选项1 选项 2 添加到购物车

Javascript:

function addToCart()
 {
    var test;
    get( "cart.php", function(PHPtest) 
    {
    test = PHPtest;
    alert(test);
    });
}

PHP: 外部 PHP 文件,“cart.php”:

<?php   

    /* session_start();*/
        $PHPtest= "Example";
        echo json_encode($PHPtest);
        if(isset($_POST))
        {
             $_SESSION['cart']['0'] = $_POST['formexample1'];
        }
?>

警报显示:

“示例”
注意:未定义索引:(目录)中的formexample1在第8行

即使我注释掉“$.get()”,页面左上角也会出现相同的文本。

编辑 4

我正在尝试使用 AJAX 提取单个 PHP 变量 $PHPtest。我也在尝试正确检索 POST 信息。

HTML:

<?php session_start(); ?> <!-- This is on the first line of the page -->
...
<form id="bookingform" method="post" action="cart.php">
<select name="day">
    <option value="1">Option 1</option>
    <option value="2">Option 2</option>
</select>
<select  name="time">
    <option value="1">Option 1</option>
    <option value="2">Option 2</option>
</select>
<button type="button" onclick="addToCart()">Add to Cart</button>
</form>

Javascript:

function addToCart()
{
        $("#bookingform").submit();
        var test;
        $.get( "cart.php", function(PHPtest) {
        test = PHPtest;
        alert(test);
        });
}

购物车.php:

session_start();
    $PHPtest = "Test";
    $PHPtest = "Test2";
    echo json_encode($PHPtest);
    echo json_encode($PHPtest2);

    if(isset($_POST['day']))
    {
        /*$PHPtest3 = "test3"
        $_SESSION['cart']['0'] = $_POST['day'];
        echo json_encode($PHPtest3);
        echo json_encode($_POST['day']);*/

    }

事实上,警报会产生

> "Test""Test2"

取消注释 cart.php 中的“isset”会将警报更改为:

    <br />
<b>Parse error</b>: syntax error, unexpected '$_SESSION' (T_VARIABLE) in <b>(directory)</b> on line <b>14</b><br />

第 14 行是“$_SESSION['cart']['0'] = $_POST['day'];”的行。

【问题讨论】:

  • ajax 是异步的。您无法在成功回调之外提醒响应。还有什么是data? ...它看起来未定义。您是否看到记录到控制台的响应?是否抛出任何错误?
  • 谢谢诺登海姆,我已经添加了。 @charlietfl:现在“警报”没有显示任何东西,因为 Javascript 被破坏了,但是在我玩它之前它只是显示“未定义”。我写了“数据:数据”,因为这是我在在线示例中看到的。我昨天也尝试了“数据:PHPtest”(请参阅​​页面顶部的链接),但这没有用。 “您无法在成功回调之外提醒响应” - 抱歉,但我不确定您的意思。您是说我无法检索 PHP 变量然后在 $.AJAX() 之外的 PHP 中使用它?
  • 表示需要消费success回调里面的数据。您的警报将在 ajax 完成之前触发……发出请求需要时间。这就像订购比萨饼并试图在它交付之前吃掉它
  • @charlietfl 所以如果我理解正确,我需要延迟“alert()”的开始直到“$.ajax()”完成?我不知道该怎么做。
  • 你登录控制台的地方

标签: javascript php jquery html ajax


【解决方案1】:

有这么多的编辑,很难说出你的立场。因此,让我们倒过来解决这个问题。

编辑 3

您收到此错误是因为您实际上并未发布任何内容。 $_POST 总是会被设置。所以你的检查是给你一个误报。相反,你会想要做这样的事情:

<?php   
  session_start();
  if (isset($_POST['formexample1'])) {
    $_SESSION['cart']['0'] = $_POST['formexample1'];
  }

编辑 2:

你一开始就做对了。您实际上是在寻找 POST 数据到后端。至少从cart.php 看起来是这样。如果您想跳过使用整个$.ajax() 调用,那么您可以查看jQuery post

编辑 1:

...
    url:"cart.php",
    type:"post",
    data: data,
 ...

我看不出您的数据对象在哪里发挥作用。 Javascript 会让你抛出未定义的变量。 jQuery 会默默地为你处理它们。这可能对您有所帮助。

...
    url:"cart.php",
    type:"post",
    data: { 
      "formexample1" : $('select[name="formexample1"]').val(),
      "formexample2" : $('select[name="formexample2"]').val()
    }
...

这应该可以帮助您找回您正在寻找的结果。如果没有,请告诉我。

【讨论】:

  • 感谢您的回复!我正在查看您对编辑三的建议。看起来您使“$_POST['formexample1']”成为数组中值“$_POST['formexample2']”的键。我很困惑你为什么这样做。关于您对第二次编辑所说的话,我也对此有些困惑:“您实际上是在寻找 POST 数据到后端。”这不是 HTML 表单的工作,还是我遗漏了什么?提前致谢。
  • 对于编辑 3,我这样做只是因为它看起来就是您最初想要的。我会修正我的答案,使其更符合您在编辑 3 下发布的内容。编辑 2 您切换到 $.get()。但是您实际上并没有使用页面中的表单提交操作。您正在使用&lt;button type="button" onclick="addToCart()"&gt;,它正在规避使用&lt;input type="submit" /&gt;
  • 如果我给表单一个 ID 为“bookingform”并写了“$("#bookingform").submit();”,HTML 会被修复吗?在 $.get() 之前的“addToCart()”中?
  • 这取决于你。没有一种方法可以做到这一点。你可以 jquery.submit -> jquery.get 或者你可以 jquery.ajax(formData)
  • 谢谢。我已经用第四次编辑更新了我的开篇文章。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 2017-01-21
  • 2014-05-16
  • 1970-01-01
  • 2011-06-22
  • 2021-12-05
  • 1970-01-01
相关资源
最近更新 更多