嗨,我是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函数内部,还是必须在外部?
答案 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