簡體   English   中英

從javascript發送json到php

[英]Send json from javascript to php

我有一個頁面,用戶在其中做一些事情,然后選擇下一步,我想將他們重定向到一個名為“ 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。

你不能這樣做。 那不是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()即可。

好的,我想您會誤解AJAX的工作原理。 您的ajax請求將json發送給您的php,然后應以適當的返回值對其進行響應,在您的情況下為var_dump

這根本不會將json保留在php中,如果您在沒有POST請求的情況下請求php文件,則不會獲得任何其他信息,但輸出為“ NO”,因為您沒有發送POST數據。

如果您確實想向php發送一個json,請執行您現在正在做的事情,並聽取您在檢查器中看到的請求響應。 我不清楚您最終想對數據做什么,因此我不知道這是否是正確的方法。

您可以將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;
   }
}

在我的工作中嘗試以下代碼:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM