Отправка HTML как javascript-переменной через getJSON не работает - PullRequest
0 голосов
/ 01 мая 2011

Я видел несколько вопросов об отправке HTML-данных с PHP на HTML-страницы, но на самом деле этот вопрос наоборот (я могу получить HTML из PHP нормально с json_encode ).

Небольшой фрагмент кода, объясняющий большую часть этого:

savePage = function() {
 var pagecontents = $("#editcontents").val();
 log("Attempting to save page...");
 $.getJSON(docTools+"?jsoncallback=?",{action:'update', loginCookie:loginCookie, page:thisFile, newdata:pagecontents}, function(data) {
  if(data.response[0].answer === 'true') {
   log('Page'+thisFile+' was saved correctly: '+data.response[0].details);
   $("#editcontents, #saveedit, #canceledit").remove();
   $("#bodycontents").html(pagecontents);
  } else {
   log('Failed to save page. Error (' + data.response[0].errorcode + ') : ' + data.response[0].errormessage);
  }
 });
}

К вашему сведению: журнал просто создает console.log, если он существует.

Итак, в основном здесь происходит то, что переменная pagecontents содержит HTML-данные, все в теге <body> (то есть в заголовке нет информации, если это имеет значение). Однако, когда я на самом деле вызываю эту функцию, функция log () работает нормально ... но getJSON () никогда не завершается (на самом деле, насколько я могу судить, она никогда не доходит до моего PHP-сервера).

Если я заменим pagecontents только на стандартную строку, он будет работать нормально.

Нужно ли перед отправкой сделать что-то похожее на json_encode из javascript? Что-то, что могло бы преобразовать все в html-сущности?

- Изменить -

Итак, я только что обнаружил вкладку "Net" в Firebug, и она показывает мне то, чего я не осознавал: он показывает запрос GET со всеми правильными данными ... Но сервер возвращает 404. Я не знаю как это может произойти, если PHP-файл - это тот же файл, который я собираю за 5 секунд до этого.

Кроме того, несмотря на то, что я пытался изменить .getJSON () с помощью .post (..., 'json'), Firebug по-прежнему показывает запрос GET, а не POST, поэтому теперь он меня еще больше смущает.

Ответы [ 2 ]

0 голосов
/ 01 мая 2011

Использование

$.post {(docTools+"?jsoncallback=?",{action:'update', loginCookie:loginCookie, page:thisFile, newdata:pagecontents}, function(data) {
  if(data.response[0].answer === 'true') {
   log('Page'+thisFile+' was saved correctly: '+data.response[0].details);
   $("#editcontents, #saveedit, #canceledit").remove();
   $("#bodycontents").html(pagecontents);
  } else {
   log('Failed to save page. Error (' + data.response[0].errorcode + ') : ' + data.response[0].errormessage);
  }
 },
  'json'
);
0 голосов
/ 01 мая 2011

Вам также может понадобиться использовать encodeURIComponent, поскольку все эти данные будут отправлены в строке URL (длина также может быть проблемой).

...