$ .post不发布数据

hi this is my code for 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>
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>

and this is where i want to see if my data is posted.

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

when i click the anchor tag. the alert box is shown. but when i refresh the ajax.php page. it shows an error..Notice: Undefined index: ans in

C:\xampp\htdocs\healthqueens\hello\ajax.php on line 3

and the print of session is also empty. Array ( [demo] => ) Please if anyone can show me the mistake.

but when i refresh the ajax.php page. it shows an error

It sounds like you want to set the session variable when a value is posted, and get the session variable otherwise:

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

$.post and $.get are just shorthand versions of the more structured $.ajax(), so I prefer using the latter. The additional structure keeps me straight.

Since you are using jQuery anyway, I would re-structure your code like this:

$('#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 );
        }
    });
});

Note that the data: line is for example purposes and does not match with your code -- just showing you how to pass variables over to the PHP side.

Of course, the above includes removing the inline javascript -- never a good idea -- from your anchor tag HTML, thus:

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

Also, on the PHP side, you can verify that things are working by adding a test at the top. Matching with the data: line in the example AJAX code, it would look like this:

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;

Important: Note the use of echo, not return, to send values back to the AJAX script.

Also note that you must deal with the stuff returned from PHP in the AJAX success: function ONLY. If you need access to that data outside of the success: function, then you can stick the data into a hidden <input type="hidden" id="myHiddenInput"> element, like this:

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

Here are some additional examples of simple AJAX constructions:

A simple example

More complicated example

Populate dropdown 2 based on selection in dropdown 1