【问题标题】:Can't send JSON to server无法将 JSON 发送到服务器
【发布时间】:2012-06-18 19:39:07
【问题描述】:

由于我稍微更改了代码,因此无法让服务器识别 JSON POST 请求。以前,对于 for 循环的每次迭代都会发出一个 POST 请求,但现在我已将其更改为包含一个多级 JSON 数组。

var json=[];

for (var i=0; i < tourList.length; i++){
  var data = tourList[i];
  json.push({latitude: data.position.ab, longitude: data.position.cb, filename: data.title, stopNum: i});
}

var results= JSON.stringify(json);
console.log(json);
console.log(results);

//this code was previously inside the for loop above, moved it outside
$.ajax({
  type: "POST",
  url: "../includes/phpscripts.php?action=postTour",
  data: results,
  datatype: "json",
  beforeSend: function(x){
    if (x && x.overrideMimeType){
      x.overrideMimeType("application/json;charset=UTF-8");
    }
  },
  success: function(data){
    if (data == "success")
      console.log("Tour update successful");
    else 
      console.log("Tour update failed");
  }
});

此时,tourList 的长度为 6,results 基于 Google 地图标记点击并在 Firebug 中生成:

[
  {"latitude":43.682211,"longitude":-70.45070499999997,"filename":"../panos/photos/1-prefix_blended_fused.jpg","stopNum":0},
  {"latitude":43.6822,"longitude":-70.45076899999998,"filename":"../panos/photos/2-prefix_blended_fused.jpg","stopNum":1},
  {"latitude":43.682219,"longitude":-70.450828,"filename":"../panos/photos/3-prefix_blended_fused.jpg","stopNum":2},
  {"latitude":43.68218,"longitude":-70.45088699999997,"filename":"../panos/photos/4-prefix_blended_fused.jpg","stopNum":3}
]

但是,没有任何东西显示为 $_POST 变量,因为 $_POST 在调试器中显示为 type: array[0]。所以我没有数据集可以运行json_decode。据我所知,JSON 是有效的。有什么问题?

【问题讨论】:

    标签: jquery json post


    【解决方案1】:

    您没有发送键/值,只有值

    在 ajax 中改为:

     data: {results:results},
    

    在php中

    $results=$_POST['results']
    

    现在你可以使用json_deocde($results)

    【讨论】:

      【解决方案2】:

      将字符串作为 post var 发送。

      $.ajax({
        type: "POST",
        url: "../includes/phpscripts.php?action=postTour",
        data: {"json": results},
        dataType: "json",
        beforeSend: function(x){
          if (x && x.overrideMimeType){
            x.overrideMimeType("application/json;charset=UTF-8");
          }
        },
        success: function(data){
          if (data == "success")
            console.log("Tour update successful");
          else 
            console.log("Tour update failed");
        }
      });
      

      使用$_POST["json"]访问json

      我不确定你从 PHP 中返回了什么,但是,如果它是 json,它永远不会等于 "success"

      编辑:还有一个问题。你的datatype参数应该是dataType,这个参数只定义了从PHP返回的数据类型,而不是你发送的数据。

      【讨论】:

      • 谢谢! success 是 echo 语句的结果,是我的日志记录过程的一部分。
      • 在这种情况下,请删除 datatype 参数,因为您不会返回 JSON。
      猜你喜欢
      • 1970-01-01
      • 2017-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多