panthro
panthro

Reputation: 24099

Getting an ajax post data in php

$.ajax({
    url: '/gateway/',
    type: 'POST',
    data: {test : 'test'},
    dataType: 'json',
}).done(function(){
    console.log('done');
});

Above is my AJAX post, below is my PHP:

var_dump($_POST['test']);
die();

The problem is, this fails to work (I get a NULL value) - why?

I know my call is getting to the PHP code as I can dump any old string:

var_dump('hello');
die();

Where am I going wrong?

Upvotes: 0

Views: 61

Answers (6)

stacky
stacky

Reputation: 108

I would like to recommend you my code. and please do check the following points.

  1. check the location of the url you are giving. If it is in parent directory then you can access it using ../ and the most important thing give the extension of the file. like 'gateway.php'
  2. and write success and failure function. It gives a better insight of what's going on.

        $.ajax({
        type:'POST', 
        url:'gateway',  
        data:{test:'test'},
    
        success: function(data){
            if(data)
            {
                    alert(data);
            }
        }, 
        failure: function(){
            alert(failed);
        }
    
    }) ;
    

comment if there are any errors

hope it helps :). If it does then don't forget to green it :P

Upvotes: 0

twinlakes
twinlakes

Reputation: 10258

I'm not totally sure if this is the issue, but .done is deprecated. Additionally, as others mentioned, you are asking for json from the server and not receiving json.

Your code should look like this

$.ajax({
    url: '/gateway/',
    type: 'POST',
    data: {test : 'test'},
    success: function () {console.log('done');}
});

Upvotes: 0

Lawrence Cherone
Lawrence Cherone

Reputation: 46650

When you set dataType: "json" within the AJAX request it means the expected response should be parsed as json, (not the outgoing POST, as others have said).

Heres is a stripped down copy&paste example, for you to build upon. Hope it helps

<?php 
//is it POST
if($_SERVER['REQUEST_METHOD'] == 'POST'){

    // set var
    $test = isset($_POST['test']) ? $_POST['test'] : null;

    //do some logic - skip that bit ;p

    //was the request from AJAX, ok send back json
    if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {

        //always a good idea
        header('Content-Type: application/json');

        //json encode, notice the ABC, then look at the jQuery below
        die(json_encode(
            array('ABC' => 'From Response: '.$test)
        ));
    }
}
?>

<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
<script>
jQuery(document).ready(function(){
    var ajax = $.ajax({
        url: "./",
        type: "POST",
        data: {test : 'test'},
        dataType: "json"
    });
    ajax.done(function(data) {
        $("#result").html(data.ABC); /* << See data is an object */
    });
    ajax.fail(function(xhr, status, error) {
        $("#result").html(xhr.responseText);
    });
});
</script>

<span id="result"></span>

Upvotes: 0

Foxtrot
Foxtrot

Reputation: 1

Or change PHP code

header('Content-Type: application/json');
exit(json_encode(array('data' => 'Bla bla bla')));

Upvotes: -1

DavidT
DavidT

Reputation: 461

The POST value that you are testing with is not JSON, it's a string.

Remove the

dataType: 'json',

and it should work.

Upvotes: 1

Lewis
Lewis

Reputation: 14926

Just remove this dataType: 'json'. Your $_POST['test'] is a string value, not a JSON string.

Upvotes: 1

Related Questions