无法理解$ .ajax()参数以获取PHP变量

时间:2016-02-27 14:27:23

标签: javascript php jquery html ajax

昨天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);
        });
}

cart.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'];”。

1 个答案:

答案 0 :(得分:0)

如此多的编辑很难说明你的立场。所以让我们倒退一步来解决这个问题。

编辑3

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

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

编辑2:

首先你是对的。您实际上是想将数据发布到后端。至少从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()
    }
...

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