$.ajax+POST+JSON+PHP=为什么不起作用


$.ajax + POST + JSON + PHP = why is not working?

我现在遇到了通过$.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>&copy; 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。