Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery AJAX PHP JSON问题_Php_Javascript_Jquery_Ajax_Json - Fatal编程技术网

jQuery AJAX PHP JSON问题

jQuery AJAX PHP JSON问题,php,javascript,jquery,ajax,json,Php,Javascript,Jquery,Ajax,Json,当我以以下方式执行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">

当我以以下方式执行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>
var sJSON = $.toJSON(mJSON.id_consulta);


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

                },
                error: function (request,error){

                }
            }); 
关于我做错了什么有什么线索吗

字符串sJSON的编码正确,这是我对该字符串执行“警报”时得到的结果:

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

提前谢谢大家

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

data: {"mydata" : sJSON},
在PHP方面,由于是一个关联数组,因此您可以这样访问数据:

$m_decoded = $_POST['mydata'];

您没有在PHP端解码JSON


试试看你的代码中有几个问题:

  • 您正在声明
    数据类型:“json”
    ,但服务器不返回json,而是返回纯文本。从:

    希望从服务器返回的数据类型。如果未指定,jQuery将根据响应的MIME类型智能地尝试获取结果(XML MIME类型将生成XML,在1.4中JSON将生成JavaScript对象,在1.4中脚本将执行脚本,其他任何内容都将作为字符串返回)

  • 我认为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:

      <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>
    
    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:

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


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

    是的,但在他的例子中,我想他只是指出
    $\u POST
    数组是空的。大概一旦收到数据,他就需要使用
    json\u decode
    来做一些有用的事情。谢谢你的快速响应Felix,但我认为如果不起作用,我将ajax请求更改为:$.ajax({type:“POST”,url:“getUbicaciones.php”,data:“json=“+$.toJSON(mJSON.id_consulta),processData:false,success:function(respuesta){alert(“success:+respuesta”);},error:function(请求,error){alert(“error:error:“+request.statusText+”“+error);}});在PHP中我做到了:$m_decoded=json_decode($_POST[“json”]);但是结果现在是空的,$m_decoded是空的,还有其他线索吗?我收到的是PHP(json编码):[{\'id\':0},{\'id\':1},{\'id\':2}]如果尝试用json_decode解码,它返回“空”。我正在尝试:$m_decoded=json_decode($_POST[“json”]);结果什么都没有。您是否尝试过使用firebug查看POST请求中实际发送的内容?另外,您为什么说
    contentType:“application/json;charset=utf-8”
    ,而不是
    contentType:
    “application/json”`实际上您不需要指定
    contentType
    ,由于您将发布的是一个序列化json数组,它最终将转换为键值对字符串(jquery在内部执行此操作),
    contentType
    用于告诉您发送的数据类型。。。在本例中,json将被转换为键值对,并以普通字符串发送<代码>数据类型:如果您读取要发送到服务器的
    数据,“json”
    足以让它工作。如果尚未转换为字符串,则会将其转换为查询字符串。它被附加到GET请求的url。请参阅processData选项以防止此自动处理。对象必须是键/值对。如果value是一个数组,jQuery将基于传统设置(如下所述)的值用同一个键序列化多个值。效果很好,但您可以简单地说
    data:mJSON
    ,无需提及
    processData
    ,也无需使用
    var sJSON=$.toJSON(mJSON.id\u consulta)将其转换为JSON;。您可以简单地编写
    data:mJSON
    并删除
    processData参数
    。。。。在PHP端,您将直接获得一个数组,该数组不需要
    解码
    也不需要
    条带斜杠
    $m_decoded = json_decode(stripslashes($_POST["json"]));