Javascript变量使用Ajax传递给PHP

时间:2014-06-02 22:45:28

标签: javascript php jquery ajax

我最近开始使用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”不应该被回应吗?

5 个答案:

答案 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)

正如其他人所提到的,听起来你期望两位代码同时运行。现实是:

  • zip.php将在服务器上解析(并导致错误)
  • 服务器然后将HTML提供给浏览器(由于解析PHP时$ _POST不存在,因此将有一个空白的主体)
  • 浏览器会看到javascript .ready()并运行该代码
  • 服务器将处理对zip.php的POST请求,并生成您期望的HTML。它将在AJAX响应中返回,但由于您没有处理响应,因此当前会话中不会显示任何内容。 (您可以使用任何常见的Web开发人员工具查看POST响应)

请记住,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];
}