【发布时间】: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