繁体   English   中英

如何将json对象值传递给php dinamically?

[英]How to pass json object values to php dinamically?

嗨,我是JSON和Ajax的新手,我的问题可能很愚蠢,但在学习时,愚蠢的问题也是根本。

我需要通过Ajax(giorno和periodo)传递两个参数,

例如'giorno'= 2017-05-10和'periodo'= 2:

$.ajax({
    type:'POST',
    data: JSON.stringify({
    giorno: $('#dataselezionata').val(),
    periodo: $('input:radio[name=periodo]:checked').val()
    }),
    contentType: "application/json; charset=utf-8",
    dataType : 'json',
    url:'http://www.rinnovipatenti.com/index2.php?a=prenotazione' 
    });

JSON对象完美传递,Firebug控制台中的结果是:

{"giorno":"2017-05-10","periodo":"2"}

如果我尝试手动复制并粘贴php页面上的对象,如下所示:

<?
$json       = '{"giorno":"2017-05-10","periodo":"2"}'; //pasted manually

$json       = json_decode($json, TRUE);

$giorno = $json['giorno'];
$periodo    = $json['periodo'];

echo"$giorno"; //2017-05-10
echo"$periodo"; //2
?>

这两个回声向我展示了价值观。 好!

我的问题在这里开始和停止 我无法将JSON对象解码。

我很确定这是一个愚蠢的解决方案,但我不知道该怎么做。

我需要创建一个包装Ajax调用的函数,然后在json_decode中调用该函数?

PS我也尝试用“$ _POST ['giorno']”等来获取值,而不是使用JSON但没有成功。

有人能帮助我吗? 感谢您的耐心等待。

更新10/05/2017

嗨我已经按照你的建议,所以我尝试了一次更简单的代码,如下所示:

$('input:radio[name=periodo]').change(function() {

var giorno = document.getElementById("dataselezionata").value; // from datepicker
var periodo = $('input:radio[name=periodo]:checked').val(); // from radio button

var post_data = ("giorno="+giorno+"&periodo="+periodo);

$.ajax({
    type:'GET',
    data: post_data,
    url:"http://www.rinnovipatenti.com/prenota/prenotazione.php",
    });

if (this.value == '1') {
            $('#orario').show();
            $('#orari-mattina').show();
            $('#orari-pomeriggio').hide();
            }
else if (this.value == '2') {
            $('#orario').show();
            $('#orari-pomeriggio').show();
            $('#orari-mattina').hide();
        }

使用GET方法而不是POST方法,在PHP页面prenotazione.php中 ,代码现在是:

<?
$giorno = $_GET['giorno'];
$periodo    = $_GET['periodo'];   

echo"$giorno";
echo"$periodo";
?>

在Firebug控制台中,参数正常

giorno 2017-05-10
periodo 2

格式化的链接是:

http://www.rinnovipatenti.com/prenota/prenotazione.php?giorno=2017-05-10&periodo=2

html控制台预览正常工作,但页面没有。 我在角落里! 很奇怪。 我只有一个疑问:我可以通过GET / POST方法将数据发送到收集数据的同一页面吗? 换句话说,页面foo.php可以将数据发送到foo.php,就像没有刷新的循环一样? 并且ajax调用可以包含在.change函数中,还是必须在外面?

$.post( "http://www.rinnovipatenti.com/index2.php?a=prenotazione", {
    giorno: $('#dataselezionata').val(),
    periodo: $('input:radio[name=periodo]:checked').val()
    } );

你不需要将你的JSON字符串化

在PHP方面,你只需使用

$giorno = $_POST['giorno'];
$periodo    = $_POST['periodo'];

获得价值

你可以使用以下功能。 你已经拥有它了。 它对我来说很好。

$('input:radio[name=periodo]').change(function() {

    var giorno = '2017-05-15';
    var periodo = '2';

    $.post( 'http://www.rinnovipatenti.com/index2.php?a=prenotazione', {
        giorno: giorno,
        periodo: periodo
        });
    /*....*/
}); 

方法2

您不必将JSON对象进行字符串化

$.ajax({
    type:'POST',
    data: {
    giorno: $('#dataselezionata').val(),
    periodo: $('input:radio[name=periodo]:checked').val()
    },
    contentType: "application/json; charset=utf-8",
    dataType : 'json',
    url:'http://www.rinnovipatenti.com/index2.php?a=prenotazione' 
    });

所以你的PHP代码将是这样的

<?


$giorno = $_POST['giorno'];
$periodo    = $_POST['periodo'];

echo"$giorno"; //2017-05-10
echo"$periodo"; //2
?>

方法2

如果要对JSON对象进行字符串化,则将其放入密钥中

$.ajax({
    type:'POST',
    data: 'data='+JSON.stringify({
    giorno: $('#dataselezionata').val(),
    periodo: $('input:radio[name=periodo]:checked').val()
    }),
    contentType: "application/json; charset=utf-8",
    dataType : 'json',
    url:'http://www.rinnovipatenti.com/index2.php?a=prenotazione' 
    });

所以你的PHP代码将是这样的

<?
$json       = $_POST['data'];

$json       = json_decode($json, TRUE);

$giorno = $json['giorno'];
$periodo    = $json['periodo'];

echo"$giorno"; //2017-05-10
echo"$periodo"; //2
?>

当您将application/json有效负载发送到php以访问该有效负载时:

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

正如在其他评论和答案中提到的那样,如果你使用$.ajax默认表格编码并且不用json字符串化数据然后使用$_POST

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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