# Client-side AJAX using JSON

Very often, many developers, including *myself* in the past, normally all along we were using jQuery's `$.ajax` and sending in JSON with `dataType: 'json'` without really sending the `content-type` as a JSON string which is supposed to be `application/json` - instead we were actually sending in a regular POST (`application/x-www-urlencoded`) and decoding it from the PHP side as `$_POST`.

So, if you have this script, **post.php**, in a folder :

```php
<?php
$post_body = $_POST;
echo json_encode($post_body);
?>
```

and in **jqurey-ajax.html** :

```xml
<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    <title>jQuery AJAX</title>     
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.3/jquery.min.js"></script> 
</head> 
<body> 

<script>
let url = "http://localhost:8989/post.php";

const formData = new FormData();
formData.append("username", "john");
formData.append("password", "a5y6e7Chk65kmFWeK5F5");

const run = async() =>
{   
    $.ajax({
        type: 'ajax',
        method: 'post',
        url: url,
        data: {username: "john", password: "a5y6e7Chk65kmFWeK5F5"},
        async: false,
        dataType: 'json',
        success: function(result) { console.log(result); },
        error: function() { console.log("error"); }
    });
}

run();

</script>
</body>
</html>
```

we get :

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1677646306335/cc06362a-78b9-41cc-981b-5afac656c1bc.png align="center")

## The Real JSON

### For sending in non-JSON requests

Have this script, run.php, in the same folder :

```php
<?php
$post_body = file_get_contents('php://input');
parse_str($post_body, $queryArray);
print_r($queryArray);
?>
```

If you have this HTML file in the same folder as client.html

```javascript
let url = "http://localhost:8989/run.php";

const formData = new FormData();
formData.append("username", "john");
formData.append("password", "a5y6e7Chk65kmFWeK5F5");

const run = async() =>
{   
    let response = await fetch(url,
        {
            method: "POST",
            headers:
            {
                "Content-Type": "application/x-www-urlencoded",                
            },
            body: new URLSearchParams(formData),            
        });
}

run();
```

If you run \`php.exe -S [localhost:8989](http://localhost:8989)\`, you should get this in the response of the URL request you'll see in console :

```plaintext
Array
(
    [username] => john
    [password] => a5y6e7Chk65kmFWeK5F5
)
```

### For sending in JSON requests

run.php :

```php
<?php
$post_body = file_get_contents('php://input');
print_r($post_body);
?>
```

client.html :

```javascript
let url = "http://localhost:8989/run.php";

const formData = new FormData();
formData.append("username", "john");
formData.append("password", "a5y6e7Chk65kmFWeK5F5");

const run = async() =>
{   
    var object = {};
    formData.forEach((value, key) => object[key] = value);

    let response = await fetch(url,
        {
            method: "POST",
            headers:
            {                
                "Content-Type":"application/json",
            },            
            body: JSON.stringify(object)
        });
}

run();
```

We get :

```plaintext
username	"john"
password	"a5y6e7Chk65kmFWeK5F5"
```

I haven't *echo*ed a JSON string to the output in the above 2 examples because I just wanted show how it's communicated - I'll leave it up to you to print a JSON string on the server-side for the client to fetch as response.
