2014-10-30 153 views
1

我有一個頁面,用戶在那裏做一些事情,然後選擇下一個,我想將它們重定向到一個名爲「Step2.php」的php文件以及一些JSON信息。發送json從javascript到php

我建我的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。

+0

你看到的Json發送味精或在您的控制檯錯誤? (例如,這是JS問題還是PHP問題?) – scunliffe 2014-10-30 22:58:48

+1

PS你的JSON數據字符串缺少最後一個關閉']'字符......這只是一個錯字嗎?或者在代碼中呢? – scunliffe 2014-10-30 23:03:55

+0

我想這是一個PHP的問題,因爲阿賈克斯運行成功,顯示「JSON發送」。 這是將用戶重定向到Step2.php頁面的正確方法嗎? – user2997779 2014-10-30 23:04:20

回答

1

好的,我想你誤解了AJAX的工作原理。你ajax請求發送json到你的php,然後應該以適當的回報作出響應,在你的情況下var_dump

這不會在php中保存json,如果你去請求沒有POST請求的php文件,你將不會得到任何東西,只是輸出「NO」,因爲你沒有POST數據發送。

如果你確實想發送一個json給你php,你現在正在做你正在做的事,並聽取你在檢查員看到的請求響應。我不清楚你最終想要對數據做什麼,所以我不知道這是否正確。

1

你不能這樣做。這不是AJAX和POST的工作原理。

如果您只是轉到Step2.php,請嘗試將其作爲URL的一部分發送到頁面。

而不是你的AJAX功能,只需做:

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

或者如果PHP創建的JSON字符串,您可以將其保存爲一個會話變量。

編輯:爲進一步大膽一點會話變量路線上...

讓你的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()。

-2

試試這個代碼在我的工作:

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

您可以發表JSONPHP

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; 
    } 
}