user2364801
user2364801

Reputation: 15

POST data to redirect page fail

I was totally confused by the following situation...

situation

post data from a.php to b.php and redirect to b.php...but fail

CODE - a.php

<html>
  <head>
    <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
    <script>
      $(document).ready(function() {
        $('#submit').click(function() {
          $.ajax({
            url: 'b.php',    
            dataType: 'html',
            type: 'POST',
            data: { 
              value: $('#value').val()
            },
            error: function(xhr) {
              console.log('ajax went wrong!');
            },
            success: function(response) {
              console.log(response);
              window.location.href = "b.php";      
            }
          });

        });
      });
    </script>
  </head>
  <body>
    value: <input type="text" id="value">
  </body>
</html>

CODE - b.php

<?php
  echo $_REQUEST['value'];
?>

a.php can get the right response from b.php without redirect function. However, once I include the statement window.location.href = "b.php";, a.php will redirect to b.php but without printing anything. Why is this situation happening? Is there any solution to fix this?

Thanks!

Upvotes: 0

Views: 767

Answers (5)

Chinmay235
Chinmay235

Reputation: 3414

Try this one, i think this will help you.
Here i create two pages.
one is a.php and another page is b.php

a.php

<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
    <script>
      $(document).ready(function() {
        var abc='';
        $('#submit').click(function() {
        var abc=$('#abc').val();
          $.ajax({
            url: 'b.php',
            dataType: 'html',
            type: 'POST',
            data: { 
              value: abc
            },
            error: function(xhr) {
              console.log('ajax went wrong!');
            },
            success: function(response) {
              console.log(response);
                var stateObj = { foo: "b" };
                history.pushState(stateObj, "page 2", "b.php?value="+response);
                $('#hid').hide();
                $('#res').html(response);
            }
          });

        });
      });
    </script>

    <html>
    <body>
         <div id="hid">
            Value: <input type="text" id="abc" /> <input type="button" id="submit" value="Get Value" /><br>
        </div>
    <div id="res"></div>
    </body>
    </html>

b.php

<?php
echo $_REQUEST['value'];
?>

Upvotes: 0

Jose Areas
Jose Areas

Reputation: 719

Your ajax code is working. It is calling the url b.php and printing the value to output. However, the result is not what you expect.

When you made the ajax call and send the data in the form, the evaluation of b.php will be in response when ajax request is successful. Try to make the following change :

From

window.location.href = "b.php"; 

to

alert(response);

You will see what you send in the input in a message box. Follow your code adapted. Note I added a button to make the call:

index.php

<html>
  <head>
    <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
    <script>
      $(document).ready(function() {
        $('#submit').click(function() {
          $.ajax({
            url: 'ajax.php',    
            dataType: 'html',
            type: 'POST',
            data: { 
              value: $('#value').val()
            },
            error: function(xhr) {
              console.log('ajax went wrong!');
            },
            success: function(response) {
                alert(response);
                console.log(response);
              //window.location.href = "b.php";      
            }
          });

        });
      });
    </script>
  </head>
  <body>
    value: <input type="text" id="value">
    <input type=button id="submit" value=go>
  </body>
</html>

ajax.php

<?php
echo $_REQUEST['value'];
?>

This is the ajax approach. But if you need only pass the value in the form to b.php, you do not need ajax. Just create a form and use b.php as it action like this:

index.php

    <html>
  <head>
  </head>
  <body>
    <form method="POST" action="b.php">
    value: <input type="text" id="value" name="value">
    <input type=submit  value=go>
    </form>
  </body>
</html>

b.php

<?php
echo $_REQUEST['value'];
?>

Note the changes I made in your html.

Upvotes: 1

Smile
Smile

Reputation: 2768

You just need a <form> so that whenever you click on submit button your all form data will be transferred to b.php (YOU WILL AUTOMATICALLY BE REDIRECTED TO b.php page) and you can there access $_POST['value']. That's very simple. No need to do $.ajax call.

<form id="myFrm" name="myFrm" method="post" action="b.php">
    value: <input type="text" id="value" name="value">
    <input type="submit" id="submit" name="submit" value="submit">
</form>

Upvotes: 1

Ruslan Polutsygan
Ruslan Polutsygan

Reputation: 4461

you can't pass data between to pages in this way. Posting data to b.php and redirecting to it - are two different requests.

if you want to pass data via redirecting - use GET params:

window.location.href = "b.php?value="+$('#value').val();

Also form submission directly to b.php can help you.

<form action="b.php" method="post">
    <input name="value" />
    <input type="submit" />
</form>

Upvotes: 1

praveen
praveen

Reputation: 420

use

$_post['value'] instead of $_request['value']

Upvotes: -1

Related Questions