理解 $.ajax() 参数以获取 PHP 变量时遇到麻烦


Trouble Understanding $.ajax() Parametres to get PHP Variable

昨天我问了关于将HTML,Javascript和PHP与会话连接的问题。

有人建议我使用 $.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文件:购物车.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:这是在文件"预订.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'];
        }
?>

警报显示:

"example"
注意:未定义的索引:formexample1 在第 8 行<<b>br/>

相同的文本出现在页面的左上角,即使我注释掉了"$.get()"。

编辑 4

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

.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"

取消注释购物车中的"isset".php会将警报更改为:

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

第 14 行是带有"$_SESSION['购物车']['0'] = $_POST['天'];"的行。

有这么多的编辑,很难说你对此持什么立场。因此,让我们逆向工作并弄清楚这一点。

编辑 3

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

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

编辑 2:

你一开始就做对了。您实际上希望将数据发布到后端。至少从购物车中看.php是这样。如果你想跳过整个$.ajax()调用,那么你可以查看jQuery帖子。

编辑 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()
    }
...

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