简体   繁体   中英

Parse a json reply from a jquery result in php

I have a simple search form which query an external server for result with jquery

$("#formsearch").on("submit", function (event) {
        // everything looks good!
        event.preventDefault();
        submitFormSearch();
});
function submitFormSearch(){
    // Initiate Variables With Form Content
    var searchinput = $("#searchinput").val();
    $.ajax({
        type: "GET",
        url: "https://external-server/api/",
        headers: {"Authorization": "xxxxxxxxxxxxxx"},
        data: "action=Search&query="+searchinput,
                success:function(json){
                    console.log(json);
                    $.ajax({
                        type: "POST",
                        url:'search_func.php',
                        data: "func=parse&json="+json,
                        success:function(data) {
                            console.log(data);
                            $('#risultato_ricerca').html(data);                         
                            }
                    });
                }
    });
}

The first GET ajax works properly and I get correct data but trying to send this json data to my php script in post I can't get data. This is the code in search_func.php

if(isset($_POST['func']) && !empty($_POST['func'])){
    switch($_POST['func']){
    case 'parse':
            parse($_POST['json']);
            break;
        default:
            break;
    }
} 
function parse($json) {
    $obj = json_decode($json,true);
    var_dump($obj);
}

... it displays NULL

Where I'm wrong ?

EDIT: SOLVED

changing:
data: "func=parse&json="+json, to: data: { func: 'parse', json: JSON.stringify(json) },

json code is correctly passed to search_func.php Changed function parse in php file to:

function parse($json) {
    $data = json_decode(stripslashes($json),true); 
    print_r($data);
}

Thank you.

Is the javascript json variable correctly filled (ie what does your console show you?) Possible you must encode the json variable to a string before posting.

ie: instead of data: "func=parse&json="+json, use data: "func=parse&json="+JSON.stringify(json),

See this: http://api.jquery.com/jquery.ajax/

The correct syntax is: data: { func: 'parse', json: my_json_here }

If this doesn't works is probably that you have to encode the JSON to a string (see JSON.stringify() )

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM