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

时间:2017-05-09 11:15:56

标签: javascript php jquery json ajax

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

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

例如,

'焦尔诺' = 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
?>

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

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

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

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

PS 我还尝试用&#34; $ _ POST [&#39; giorno&#39;]&#34;来简单地获取值。等等。而不是使用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函数内部,还是必须在外部?

3 个答案:

答案 0 :(得分:2)

$.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
        });
    /*....*/
}); 

答案 1 :(得分:1)

  

方法2

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

   Posts (PostId, ForumId)  
   Products (ProductId, ForumId)  
   Forums (ForumId)  
   Comments (CommentId, ForumId, CommentText)  

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

$.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' 
    });
  

方法2

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

<?


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

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

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

$.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' 
    });

答案 2 :(得分:0)

当您向php发送application/json有效负载以访问该有效负载时使用:

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

正如其他评论和答案所述,如果您使用$.ajax默认表单编码并且不使用json字符串化数据,请使用$_POST