Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Axios posting params not read by $_POST

So I have this code:

axios({
    method: 'post',
    url,
    headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
    data: {
        json,
        type,
    }   
})  

Originally I had the normal axios.post but I changed to this because I thought it might have been a header problem. However I am still detecting nothing in my $_REQUEST nor $_POST. However, it is receiving data in file_get_contents("php://input").

Any idea what is wrong?

Edit

Okay I think I know what's wrong. It's posting it as a json object so it can only be read in the php://input. How do I change it to a normal string in axios?

like image 454
A. L Avatar asked Jan 04 '17 06:01

A. L


2 Answers

From the documentation (I haven't preserved links in the quoted material):

Using application/x-www-form-urlencoded format

By default, axios serializes JavaScript objects to JSON.

PHP doesn't support JSON as a data format for populating $_POST.

It only supports the machine-processable formats natively supported by HTML forms:

  • application/x-www-form-urlencoded
  • multipart/form-data

To send data in the application/x-www-form-urlencoded format instead, you can use one of the following options.

Browser

In a browser, you can use the URLSearchParams API as follows:

var params = new URLSearchParams();
params.append('param1', 'value1');
params.append('param2', 'value2');
axios.post('/foo', params); 

Note that URLSearchParams is not supported by all browsers, but there is a polyfill available (make sure to polyfill the global environment).

Alternatively, you can encode data using the qs library:

var qs = require('qs');
axios.post('/foo', qs.stringify({ 'bar': 123 }));

Or you could customise your PHP so it can handle JSON as per this answer on another question.

like image 50
Quentin Avatar answered Oct 18 '22 22:10

Quentin


var params = {
    data1: 'string',
}

axios.post(url, params).then(function(response) {
    //code here 
});

or

axios.post(url, {data1: 'string' }).then(function(response) {
    //code here 
});

api

$_POST = json_decode(file_get_contents("php://input"),true);
echo $_POST['data1'];
like image 53
Pedz Avatar answered Oct 18 '22 22:10

Pedz