【问题标题】:$.post not posting data$.post 不发布数据
【发布时间】:2013-09-10 16:12:58
【问题描述】:

这是我下面的 page.php 文件代码。

<?php session_start(); ?>
<script type="text/javascript" src="js/jquery-1.8.2.js"></script>
<script type="text/javascript" src="js/jquery.colorbox.js"></script>
<script type="text/javascript" src="js/new-landing.js"></script>
<script type="text/javascript">
    var ans1 = "home";
    function aa(){
        $.post("ajax.php", { "ans": "test" }, function(data){
            alert("Posted");
        }, "html");
    };
</script>
<a href="#" id="q1" onClick="javascript:aa();" >click</a>

这是我想查看我的数据是否发布的地方。

<?php
    session_start();
    $te = $_POST['ans'];
    $_SESSION['demo'] = $te;
    echo "<pre>".print_r($_SESSION,'/n')."</pre>";
?>

当我单击锚标记时。显示警告框。但是当我刷新 ajax.php 页面时。它显示一个错误..注意:未定义的索引:第 3 行的 ajax.php 中的 ans

而且 session 的打印也是空的。

Array(
   [demo] => 
)

【问题讨论】:

  • 嗨,严酷 - 我们解决了您的问题吗?如果没有,请更新您的问题和/或在答案下发表评论,以便我们收到您需要更多帮助的提醒。但是,如果此问题已得到解答,请选择“最佳答案”以结束该问题。

标签: php javascript jquery ajax


【解决方案1】:

但是当我刷新 ajax.php 页面时。它显示一个错误

听起来您想在发布值时设置会话变量,否则获取会话变量:

<?php
session_start();
if (isset($_POST['ans'])) {
    $te = $_POST['ans'];
    $_SESSION['demo'] = $te;
}
echo "<pre>".print_r($_SESSION,'/n')."</pre>";
?>

【讨论】:

  • 它只是为了测试目的。只需要找出为什么它没有在 ajax.php 中获取存储在会话中的数据
  • 但数据仍然发布在哪里?
  • 直接访问ajax.php时,没有$_POST变量。您需要测试发布的变量是否存在,我在答案中提供了。
【解决方案2】:

$.post$.get 只是更结构化的$.ajax() 的简写版本,所以我更喜欢使用后者。额外的结构让我保持直截了当。

既然你仍然使用 jQuery,我会像这样重新构建你的代码:

$('#q1').click(function() {
    var test = "Hello there";
    $.ajax(function() {
        type: "POST",
        url: 'ajax.php',
        data: 'ans=' +test+ '&anothervarname=' + anothervarvalue,
        success: function(recd_data) {
            alert('Rec'd from PHP: ' + recd_data );
        }
    });
});

请注意,data: 行仅用于示例目的,与您的代码不匹配 - 只是向您展示如何将变量传递到 PHP 端。

当然,上述内容包括从您的锚标记 HTML 中删除内联 javascript——这绝不是一个好主意,因此:

 <a href="#" id="q1" >click</a>

此外,在 PHP 方面,您可以通过在顶部添加测试来验证一切是否正常。与示例 AJAX 代码中的 data: 行匹配,它看起来像这样:

ajax.php

<?php
$a = $_POST['ans'];
$b = $_POST['anothervarname'];

$response = '<h1>Received at PHP side:</h1>';
$response .= 'Variable [ans] has value: ' . $a . '<br>';
$response .= 'Variable [anothervarname] has value: ' . $b . '<br>';

echo $response;

重要提示:请注意使用echo,而不是return,将值发送回AJAX 脚本。

还请注意,您必须处理从 PHP 返回的内容仅在 AJAX success: 函数中。如果您需要在 success: 函数之外访问该数据,则可以将数据粘贴到隐藏的 &lt;input type="hidden" id="myHiddenInput"&gt; 元素中,如下所示:

success: function(recd_data) {
    $('#myHiddenInput').html(recd_data);
}

以下是一些简单的 AJAX 构造的其他示例:

A simple example

More complicated example

Populate dropdown 2 based on selection in dropdown 1

【讨论】:

  • 虽然这是一个很好的答案,但它并没有回答任何手头的问题!
  • 确实如此。如果 OP 在 PHP 文件 (ajax.php) 的顶部放置一个测试并回显他发布的任何变量(或者甚至只是die('Here I am');,那么他将确切地看到发生了什么。重组他的 ajax 代码也将简化情况并帮助解决问题。
猜你喜欢
  • 1970-01-01
  • 2017-09-29
  • 1970-01-01
  • 1970-01-01
  • 2011-11-04
  • 2015-04-04
  • 2014-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多