我最近开始使用ajax,但是我遇到了一些非常简单的问题:在PHP中存储JS变量。
假设我想存储一个邮政编码(用Javascript分配)并通过AJAX将其传递给PHP变量:为什么这不起作用?
为了演示目的而保持简单,但这是我想要的功能..
zipCode.js:
$(document).ready(function() {
var zip = '123456';
$.ajax({
url: 'zip.php',
data: {zip_code:zip},
type: 'POST'
});
});
zip.php:
<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script src="zipcode.js"></script>
</head>
<body>
<?php
echo $_POST['zip_code'];
?>
</body>
</html>
错误:“注意:未定义索引:zip_code”是返回的全部内容。 “123456”不应该被回应吗?
答案 0 :(得分:2)
你应该把这个:
<?php
// query database before echoing an associative array of `json_encode()`ed data if a response is needed
echo json_encode(array('zip_code' => $_POST['zip_code']);
?>
在单独的页面上,这不是HTML页面。 AJAX只是发送到该页面,因此您可以使用它并将其回显,在此之前进行数据库查询,或者您拥有什么。在success
上,如果您使用success
作为参数,data
的结果将是zip_code
,那么您将看到echo的结果作为参数传递给data.zip_code
方法在dataType:'JSON'
举行。另外,将$.ajax({/*here*/})
设置为var zip = '123456';
$.ajax({
url: 'zip.php',
data: {zip_code:zip},
type: 'POST',
dataType: 'JSON',
success: function(data){
// in here is where you do stuff to your page
console.log(data.zip_code);
}
});
。
下面:
{{1}}
答案 1 :(得分:1)
当您加载页面时,正在调用zip.php的服务器,但该请求绝不会链接到您当前正在查看的页面。
如果您查看对ajax请求的回复 - 您会看到带有正确邮政编码的页面副本
然后,实际答案取决于您正在尝试做什么(以及代码的简化版本),以便为您提供最佳选择。
您目前的设置在实践中没有意义
答案 2 :(得分:1)
这不是AJAX的工作原理。请看下面的例子。它会向handle_zip.php发布一个AJAX帖子并提醒结果(收到的邮政编码123456 )
start_page.html:
<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script src="zipcode.js"></script>
</head>
<body>
This is just a static page.
</body>
</html>
zipcode.js:
$(document).ready(function() {
var zip = '123456';
$.ajax({
url: 'handle_post.php',
data: {zip_code:zip},
type: 'POST',
success: handleData
});
});
}
function handleData(data) {
alert(data);
}
handle_post.php:
<?php
die ('Received ZIP code ' . $_POST['zip_code']);
答案 3 :(得分:1)
正如其他人所提到的,听起来你期望两位代码同时运行。现实是:
请记住,PHP在服务器上运行,然后在客户端上运行任何javascript。你也错过了处理你在javascript中提出的请求的响应的步骤。
答案 4 :(得分:0)
尝试这样可以让您更好地了解正在发生的事情。
$.ajax({
url: 'zip.php',
data: {zip_code:zip},
type: 'POST'
});.done(function(data ) {
console.log(data)
});
在您的代码中,服务器首先创建页面,因此还没有运行javascript,因此它会产生错误,因为$ _POST ['zip_code']不存在。然后它将此页面发送到您的浏览器,您可以看到它。此时,当您的浏览器执行javascript时,它再次发送请求,现在使用POST数据,服务器应该返回请求的响应,您应该能够在控制台中看到它。
您可以创建这两个单独的页面,一个用于查看页面,另一个用于处理ajax请求,或者如果您的应用程序要在同一页面中执行,则需要使用if语句来删除那个错误,比如
if(isset($_POST['zip_code'])){
echo $_POST['zip_code];
}