【问题标题】:Send json from javascript to php将 json 从 javascript 发送到 php
【发布时间】:2014-10-30 22:56:33
【问题描述】:

我有一个页面,用户在其中做一些事情,在选择下一步时,我想将他们重定向到一个名为“Step2.php”的 php 文件以及一些 JSON 信息。

我构建了我的 json 字符串,它看起来像这样:

[{"name":"IMG_20130726_182336.jpg","size":2280709,"type":"image/jpeg","width":null,"height":null,"lastModified":1374852216000,"fileExtension":"jpg","orientation":1,"displayed":true,"attributes":[{"title":"Name: ","value":"IMG_20130726_182336.jpg"},{"title":"Date: ","value":"no date"}]}]

现在,我通过 jquery POST 像这样发送它:

jsonData = JSON.stringify(serializableAttributes);
    console.log(jsonData);
    $.ajax({
        type: 'POST',
        url: 'Step2.php',
        data: {"jsonData" : jsonData},
        success: function(msg) {
            console.log("Json Sent! " +msg);
            window.location("")
        },
        error: function(request,msg){
            console.log("Error : " + msg);
        }
    });

问题:为什么我无法在我的 Step2.php 文件中收到任何内容?我是否错误地将用户重定向到该页面?

Step2.php 文件中的代码如下所示:

if(isset($_POST["jsonData"])) {
    $json = $_POST["jsonData"];
    var_dump(json_decode($json, true));
} else {
    echo "NO";
}

它总是显示NO。

【问题讨论】:

  • 您是否在控制台中看到 Json Sent msg 或 Error? (例如,这是 JS 问题还是 PHP 问题?)
  • PS 你的 JSON 数据字符串缺少最后一个结束 ] 字符...这只是一个错字吗?还是在代码中?
  • 我猜这是一个 php 问题,因为 ajax 运行成功,显示“Json Sent”。这是将用户重定向到 Step2.php 页面的正确方法吗?
  • @scunliffe 错字,json 字符串太大了,不能放在这里。
  • 我认为您对 POST 和 AJAX 的工作原理有一个非常根本的误解。

标签: javascript php jquery json post


【解决方案1】:

好吧,我认为您误解了 AJAX 的工作原理。您的 ajax 请求将 json 发送给您的 php,然后应使用适当的返回对其进行响应,在您的情况下为 var_dump

这根本不会在 php 中保存 json,如果您在没有 POST 请求的情况下请求 php 文件,您将不会得到任何其他内容,但输出“NO”,因为您没有发送 POST 数据.

如果您确实想向您的 php 发送一个 json,您可以执行您现在正在做的事情并听取您可以在检查器中看到的请求响应。我不清楚你最终想要对数据做什么,所以我不知道这是否是正确的方法。

【讨论】:

    【解决方案2】:

    你不能这样做。这不是 AJAX 和 POST 的工作方式。

    如果您只是去 Step2.php,请尝试将其作为 URL 的一部分发送到页面。

    代替您的 AJAX 函数,只需执行以下操作:

    var jsonData = [YOUR DATA]; 
    window.location.href="Step2.php?json="+jsonData
    

    或者如果 PHP 创建了 JSON 字符串,您可以将其存储为 SESSION 变量。

    编辑:在 SESSION 可变路由上进一步冒险...

    拥有现在的 AJAX 脚本,但创建一个新的 PHP 文件。在本例中,我们将其命名为 foo.php。像这样设置 foo.php 文件:

    session_start();
    if($_POST){
        if(isset($_POST['jsonData'])){
            $json = $_POST['jsonData'];
            $_SESSION['jsonData'] = $json;
            //CREATE A JSON RESPONSE INIDCATING SUCCESS
            echo '{ "success" : 1 }';
        }
    }
    

    您的 AJAX 调用的 SUCCESS 函数可以分析成功代码的响应。如果它是“1”,则重定向到 Step2.php 页面。

    只要确保您在每个页面的顶部调用 session_start()。

    【讨论】:

      【解决方案3】:

      您可以将JSON 发布到PHP

      jsonData = JSON.stringify(serializableAttributes);
      console.log(jsonData);
      $.post("Step2.php", { json: jsonData },  function(msg) {
        console.log("image name = " + msg);
      });
      

      PHP,你只需解析:

      if(isset($_POST['json'])){
         $json = $_POST['json'];
         $data = json_decode($json);
         $image = $data[0];
         echo $image->name;
      
         $atributes = $image->attributes;
         foreach($atributes as $atrribute){
          //echo 'title '.$atribute->title;
         }
      }
      

      【讨论】:

        【解决方案4】:

        在我的工作中试试这个代码:

        <?php
        if(isset($_POST["jsonData"])) {
            $json = $_POST["jsonData"];
            $json = str_replace('\\', '', $json);
            var_dump(json_decode($json, true));
            print_r($json);
        } else {
            echo "NO";
        }
        ?>
        

        【讨论】:

          猜你喜欢
          • 2015-07-07
          • 2014-07-08
          • 1970-01-01
          • 1970-01-01
          • 2015-12-13
          • 1970-01-01
          • 1970-01-01
          • 2015-05-01
          • 1970-01-01
          相关资源
          最近更新 更多