繁体   English   中英

jQuery AJAX PHP JSON问题

[英]jQuery AJAX PHP JSON problem

当我以下列方式执行AJAX请求时,我遇到了接收空数组的问题:

这是我在JavaScript中执行的代码:

  <script type="text/javascript" src="lib/jquery.js"></script>
  <script type="text/javascript" src="lib/jquery.json.js"></script>
  <script type="text/javascript">   
   $(document).ready(function(){

    /* Preparar JSON para el request */
    var mJSON = new Object;
    mJSON.id_consulta = new Array;
    for (var i=0; i<3; i++){
     mJSON.id_consulta[i] = new Object;
     mJSON.id_consulta[i].id = i;
    }
    var sJSON = $.toJSON(mJSON); 

    $.ajax({
     type: "POST",    
     url: "getUbicaciones.php",  
     data: sJSON, 
     dataType: "json", 
     contentType: "application/json; charset=utf-8",              
     success: function(respuesta){  
      alert(respuesta);
     },
     error: function (request,error){
      alert("Error: " + request.statusText + ". " + error);
     }
    });  

   });
  </script>

这是PHP下的代码:

 <?php 
 /* Decodificar JSON */
 $m_decoded = $_POST;

 print_r($m_decoded);
 exit;
 ?>

我从中得到的是,使用Chrome的开发人员工具是一个空数组:

Array
(
)

关于我做错了什么的线索?

字符串sJSON正在被正确编码,这是我在那个上做“警告”时得到的:

{"id_consulta":[{"id":1},{"id":2},{"id":3}]}

提前谢谢大家!

从您的JavaScript中,您需要将这样的数据作为键值对传递:

data: {"mydata" : sJSON},

在PHP方面,因为$ _POST是一个关联数组,你可以像这样访问你的数据:

$m_decoded = $_POST['mydata'];

你不是在PHP端解码JSON。

试试json_decode

您的代码中存在几个问题:

  1. 您正在声明dataType: "json"但服务器不返回JSON,它返回纯文本。 文档

    期望从服务器返回的数据类型。 如果没有指定,jQuery将智能地尝试获取结果,基于响应的MIME类型(XML MIME类型将产生XML,在1.4 JSON中将产生一个JavaScript对象,在1.4脚本中将执行脚本,以及任何东西else将作为字符串返回)。

  2. 我不认为jQuery可以成功地将您的数据转换为查询字符串。 您正在尝试发送一组对象:

     {"id_consulta":[{"id":1},{"id":2},{"id":3}]} 

    使用Firebug并检查实际发送的数据。 如果要将整个字符串作为JSON发送,则必须将processData选项设置为false:

     $.ajax({ type: "POST", url: "getUbicaciones.php", data: "json=" + $.toJSON(mJSON.id_consulta), processData: false, //.... 

    你必须解码服务器端的字符串:

     $data = json_decode($_POST['json']); 

终于成功了! 它是这样的:

JavaScript的:

var sJSON = $.toJSON(mJSON.id_consulta);


            $.ajax({
                type: "POST",    
                url: "getUbicaciones.php",  
                data: "json=" + sJSON,                  
                processData: false,             
                success: function(respuesta){       

                },
                error: function (request,error){

                }
            }); 

PHP:

$m_decoded = json_decode(stripslashes($_POST["json"])); 

请注意,我必须使用“stripslashes”,因为JSON字符串具有“字符”的斜杠。

谢谢大家的帮助,我希望这有助于其他人。

暂无
暂无

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

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