send json object from javascript to php

前端 未结 3 686
说谎
说谎 2020-11-30 09:41

I am trying to send JSON object from Javascript/Jquery to PHP and I am getting and error msg in my console. What am I doing wrong. I am new to JS and PHP.

JQ

相关标签:
3条回答
  • 2020-11-30 10:01

    The standard jQuery .ajax() method uses the data property to create an x-www-form-urlencoded string to pass in the request body. Something like this

    action=Flickr&get=getPublicPhotos
    

    Therefore, your PHP script should not look for $_POST['data'] but instead, $_POST['action'] and $_POST['get'].

    If you want to send a raw JSON data payload to PHP, then do the following...

    Set the AJAX contentType parameter to application/json and send a stringified version of your JSON object as the data payload, eg

    $.ajax({
        url: '../phpincl/apiConnect.php',
        type: 'POST',
        contentType: 'application/json',
        data: JSON.stringify(flickrObj),
        dataType: 'json'
    })
    

    Your PHP script would then read the data payload from the php://input stream, eg

    $json = file_get_contents('php://input');
    

    You can then parse this into a PHP object or array...

    $dataObject = json_decode($json);
    $dataArray = json_decode($json, true);
    

    And, if you're just wanting to echo it back to the client..

    header('Content-type: application/json');
    
    // unmodified
    echo $json;
    
    // or if you've made changes to say $dataArray
    echo json_encode($dataArray);
    
    0 讨论(0)
  • 2020-11-30 10:07

    Use:

    makeFlickrCall( { data: JSON.stringify( flickr )} );
    

    Instead of

    makeFlickrCall(flickr);
    

    Your server-side script should receive your JSON as follows:

    data="{"action":"Flickr","get":"getPublicPhotos"}"
    
    0 讨论(0)
  • 2020-11-30 10:14

    Excellent answer by Phil, however since the OP title says

    send json object from javascript (not jQuery ) to php

    this is how to do it with (vanilla) javascript, in case it helps somebody looking for this method:

    var jsondata;
    var flickr = {'action': 'Flickr', 'get':'getPublicPhotos'};
    var data = JSON.stringify(flickr);
    
    var xhr = new XMLHttpRequest();
    xhr.open("POST", "../phpincl/apiConnect.php", !0);
    xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
    xhr.send(data);
    xhr.onreadystatechange = function () {
        if (xhr.readyState === 4 && xhr.status === 200) {
            // in case we reply back from server
            jsondata = JSON.parse(xhr.responseText);
            console.log(jsondata);
        }
    }
    

    Notice we still need to convert the server's response into a javascript object using JSON.parse()

    Now, on the server side (based on Phil's answer) if you are sending back a response to the client, you could do:

    header('Content-type: application/json');
    $json = file_get_contents('php://input');
    $json_decode = json_decode($json, true); 
    $json_encode = json_encode($json_decode);
    echo $json_encode;
    

    NOTE:

    The reason behind decoding first and then encoding back the raw json input is to properly escape slashes in (possible) URLs within the data, e.g.

    json_encode will convert this URL

    http://example.com
    

    into

    http:\/\/example.com
    

    ... which is not the case in the OP but useful in some other scenarios.

    0 讨论(0)
提交回复
热议问题