2014-10-30 2 views
1

У меня есть страница, где пользователи делают некоторые вещи и при выборе следующего, я хочу перенаправить их в php-файл под названием «Step2.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

+1

PS В вашей строке данных JSON отсутствует окончательный символ закрытия ']' ... это была только опечатка? или в коде тоже? – scunliffe

+0

Я предполагаю, что это проблема php, потому что ajax работает с последовательностью, показывая «Json Sent». Это правильный способ перенаправить пользователя на страницу Step2.php? – user2997779

ответ

1

Хорошо, поэтому я думаю, вы неправильно поняли, как работает AJAX. Вы запрашиваете ajax-запрос json вам php и затем должны ответить на него соответствующим возвратом, в вашем случае var_dump.

Это не будет содержать json в php вообще, и если вы пойдете и запросите php-файл без запроса POST, вы не получите ничего, кроме вывода «НЕТ», поскольку нет данных POST, которые вы отправка.

Если вы хотите отправить json на свой php, вы делаете то, что делаете сейчас, и слушаете запрос, который вы можете видеть в своем инспекторе. Я не совсем понимаю, что вы в конечном итоге хотите делать с данными, поэтому я не знаю, правильно ли это.

1

Вы не можете сделать это так. Это не работает AJAX и POST.

Если вы просто перейдете на Step2.php, попробуйте отправить его на страницу как часть URL-адреса.

Вместо вашей функции AJAX, просто сделать:

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

Или, если PHP создал строку JSON, вы можете сохранить его в качестве переменной SESSION.

EDIT: Для дальнейшего рискну немного на 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 может проанализировать ответ для кода успеха. Если это «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

Вы можете оставить 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; 
    } 
} 
Смежные вопросы