我现在遇到了通过$.ajax、json和PHP发送和接收数据的问题。
我有我的页面JQM:
<div data-role="page" id="json">
<div data-role="panel" id="painelMenu">
<div data-role="content">
<a href="index.html" data-role="button">Voltar</a>
</div>
</div>
<!-- /panel -->
<div data-role="header" data-position="fixed">
<h1>WGBN Mobile</h1>
</div>
<!-- /header -->
<div data-role="content">
<p>Esta é a página 2.</p>
<p><a href="#painelMenu" data-role="button">painel</a></p>
<p><a href="#" data-role="button" class="manda">Manda</a></p>
<hr>
<div id="mostra"></div>
</div>
<!-- /content -->
<div data-role="footer" data-position="fixed">
<h4>© 2013 WGBN Software House.</h4>
</div>
<!-- /footer -->
</div>
<!-- /page -->
使用此JavaScript运行:
$(document).delegate("#json", "pageinit", function() {
$(".manda").click(function(e) {
$.ajax({
url : "json1.php",
dataType : "json",
data : '{"opc":"sim"}',
success : function(data){
var html = "";
for($i=0; $i < data.length; $i++){
html += "<strong>Nome:</strong> "+data[$i].nome +" "+ data[$i].sobreNome;
html += " <strong>Cidade:</strong> "+data[$i].cidade
html += "<br />";
}
$("#mostra").html(html);
}
});
return false;
});
});
我的服务器上的这个PHP脚本:
<?php
if ($_POST['opc'] == "sim"){
$var = Array(
array(
"nome"=>"João",
"sobreNome"=>"Silva",
"cidade"=>"Maringá"
),
array(
"nome"=>"Ana",
"sobreNome"=>"Rocha",
"cidade"=>"Londrina"
),
array(
"nome"=>"Véra",
"sobreNome"=>"Valério",
"cidade"=>"Cianorte"
));
echo json_encode($var);
}
?>
但我无法读取发送到PHP的数据,因此它可以在服务器上运行代码并返回JSON以clinte。
一个重要的细节,如果我在javascrpt:中评论这一行
$(document).delegate("#json", "pageinit", function() {
$(".manda").click(function(e) {
$.ajax({
url : "json1.php",
dataType : "json",
/*data : '{"opc":"sim"}',*/
success : function(data){
var html = "";
for($i=0; $i < data.length; $i++){
html += "<strong>Nome:</strong> "+data[$i].nome +" "+ data[$i].sobreNome;
html += " <strong>Cidade:</strong> "+data[$i].cidade
html += "<br />";
}
$("#mostra").html(html);
}
});
return false;
});
});
以及PHP中的这些行:
<?php
//if ($_POST['opc'] == "sim"){
$var = Array(
array(
"nome"=>"João",
"sobreNome"=>"Silva",
"cidade"=>"Maringá"
),
array(
"nome"=>"Ana",
"sobreNome"=>"Rocha",
"cidade"=>"Londrina"
),
array(
"nome"=>"Véra",
"sobreNome"=>"Valério",
"cidade"=>"Cianorte"
));
echo json_encode($var);
//}
?>
我已在我的正常返回JQM页面中显示。
如何让PHP识别通过JSON发送的数据?这只是一个测试,因为解决了这个问题,我将$.ajax的完整表单发送到保存在数据库中的PHP,在这种情况下方法POST是必不可少的。
您希望传递一个对象作为参数,而不是字符串:
data : {opc: "sim"},
并将类型设置为POST:
type: 'post',
尝试发送这样的数据-
data : { opc : 'sim' },
并设置请求类型POST
type: 'post',
您缺少type
属性。.ajax的默认类型是get
,添加type: 'post'
$.ajax({
url : "json1.php",
type: 'post',
dataType : "json",
data : '{"opc":"sim"}',
success : function(data){
$.ajax({
type: 'post',
..
.
.
});
你忘了打字了。默认的ajax请求是get。但是您正在php中检查POST。