/ / Utwórz plik JSON z żądania Ajax za pomocą PHP - php, jquery, ajax, json

Utwórz plik JSON z żądania Ajax za pomocą PHP - php, jquery, ajax, json

Wiem, że wszędzie jest wiele podobnych pytań, ale nie mogłem jeszcze zapisać danych z obiektu (arkusza kalkulacyjnego) do pliku JSON.

To jest mój JS:

function (){
var spread = $("#ss").wijspread("spread");
var activeSheet = spread.getActiveSheet();
var dados = JSON.stringify(spread.toJSON());

activeSheet.bind($.wijmo.wijspread.Events.EditChange, function (sender, args) {
console.log(dados);
$.ajax({
url: "script.php",
data: dados,
dataType: "json",
type: "POST"
});
});
}

Dane przesyłane są do konsoli za każdym razem, gdy nastąpią zmiany w arkuszu kalkulacyjnym, plik jest tworzony na serwerze, ale jest pusty.

To jest skrypt.php

$myFile = "/file.json";
$fh = fopen($myFile, "w") or die("impossible to open file");
$stringData = $_POST["data"];
$stringData=json_encode($stringData);
fwrite($fh, $stringData);
fclose($fh);

Odpowiedzi:

2 dla odpowiedzi № 1

Szczerze mówiąc, nie wiem, do czego służy podwójne kodowanie JSON w Twoim skrypcie. Podzielę się tym, co tak naprawdę się dzieje:

var dados = JSON.stringify(spread.toJSON());

Zarozumiały spread.toJSON() zwraca ciąg w formacie JSON, jak sugeruje jego nazwa, w ten sposób uzyskasz podwójną reprezentację obiektu zakodowaną w formacie JSON. Jeśli toJSON zwraca obiekt, rozważ zmianę nazwy funkcji, ponieważ jest bardzo niejednoznaczna.

Będziemy postępować zgodnie z tym założeniem dados zawiera teraz prawidłową reprezentację JSON w ciągu.

   $.ajax({
url: "script.php",
data: dados,
dataType: "json",
type: "POST"
});

Wysyłasz do script.php (nie ma tam żadnych wiadomości) i TO jest tam twój pierwszy problem ajax parametr jest nieprawidłowy, ponieważ data zawiera Twoje dane, a nie pole data. Odbywa się to celowo, aby nie utrudniać dostępu do parametrów, takich jak dataType lub url (które są dość powszechne). Zamienić:

   $.ajax({
url: "script.php",
data: {
data: dados
},
dataType: "json",
type: "POST"
});

Zauważ, że dataType parametr return zmusi Cię do zwrócenia prawidłowego kodu JSON z kodu PHP, w przeciwnym razie wywołanie AJAX zakończy się niepowodzeniem.

PHP

Po dokonaniu tej modyfikacji, $_POST["data"] będzie teraz zawierać literał obiektu zakodowany w formacie JSON. Jedyną modyfikacją twojego kodu jest usunięcie json_encode. Jest już zakodowany. Nie potrzebujesz go więcej.

Myślę, że próbowałeś przekazać treść żądania do swojego kodu, w którym to momencie nie zostałbyś złapany $_POST ale z obsługą danych wejściowych (fopen(php://input)


1 dla odpowiedzi nr 2

To świetnie. Miałem ten "" problem i starałem się go rozwiązać. Dziękuję za komentarze stripslashes () rozwiązał ten sam problem również dla mnie.