2013-10-15 1 views
0

Я знаю, что есть много других подобных вопросов, но я еще не мог записать данные из объекта (таблицы) в файл JSON.Создайте файл JSON из запроса Ajax с PHP

Это мой 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"  
     }); 
    }); 
} 

данные передаются на консоль всякий раз, когда происходят изменения в таблице, файл создается на сервере, но он пуст.

Это script.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); 
+0

Почему вы пытаетесь 'json_encode()' уже кодированные данные? –

+0

Не должен ли вы json_decode вводить данные? – Alfons

+0

Я пробовал json_decode ($ stringData); но результат тот же: пустой файл JSON –

ответ

2

Я честно не знаю, что использование двойного JSON, кодирующая скрипт делает. Я ломаются, что происходит на самом деле для вас:

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

Предполагая spread.toJSON() Возвращает JSON-формат строки, как предполагает его название, вы будете в конечном итоге с двойной JSON-кодированного представления объекта, делая это. если toJSON возвращает объект, рассмотрите возможность переименования функции, так как он очень неоднозначен.

Мы пойдем с предположением, что dados теперь содержит правильное представление JSON в строке.

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

Вы не будете посылать в script.php (никаких новостей там), и ЭТО, где ваша первая проблема is.The ajax параметр не так, как data содержит данные, а не поле data. Это делается целенаправленно, чтобы не препятствовать доступу к таким параметрам, как dataType или url (которые довольно распространены). Заменить:

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

Обратите внимание, что возвращение dataType параметра заставит вас вернуть действительный JSON из вашего PHP кода, или вызов AJAX потерпит неудачу.

PHP

Совершив эту модификацию, $_POST['data'] теперь будет содержать ваш JSON-закодирован литерал объекта. Единственная модификация вашего кода - удаление json_encode. Он уже закодирован. Вам больше не нужно этого.

Я думаю, что вы пытаетесь сделать, чтобы передать тело запроса в код, в какой момент вы не были бы поймать его с $_POST, но с входными обработчиками (fopen(php://input)

+0

Привет, спасибо, это было полезно! Теперь он создает файл, хотя в нем много обратных косых черт, например: {\ "activeSheetIndex \": 0, \ "sheetCount \": 1, \ "tabStripRatio \": 0.5, \ "tabStripVisible \": правда, \ "tabEditable \": правда, \ "newTabVisible \": правда, \ "referenceStyle \": 0, \ "useWijmoTheme \" ложь \ "canUserEditFormula \": правда, \ "startSheetIndex \": 0, \ "allowUndo \": true, \ –

+0

@NunoNogueira: отключить магические кавычки или обновить до хорошей версии PHP или просто stripslashes() из ввода. –

+0

Да, stripslashes() сделал это. Спасибо за вашу помощь! –

1

Это здорово. У меня была эта проблема «я», и я пытался ее решить. Спасибо за ваши комментарии. Stripslashes() решила ту же проблему и для меня.

Смежные вопросы