Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отказалась работать форма с плагином jQuery Form 
:(
    Опции темы
WebUser
Дата 11.3.2012, 03:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 15.4.2007

Репутация: нет
Всего: нет



как только обновился до версии - version: 3.02 (07-MAR-2012) так сразу форма не стала работать, если вернутся обратно к предыдущей версии - version: 2.92 (22-NOV-2011), форма работает.

Ниже приведу отрывок из книги(HTML, JavaScript, PHP и MySQL. Джентльменский набор Web-мастера 3-е издание) по которой я делал саму форму.

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

Код
<textarea> 
Код скрипта или JSON-объект
</textarea>


если убрать textarea, работает нормально, но файл при этом не загружается. А ведь весь смысл в том, что файл загружается только при <textarea> 

теперь браузер стал выдавать такую ошибку - parsererror - SyntaxError: JSON.parse: unexpected character

Привожу отрывок из книги.




Загрузка файлов на сервер

Отличительной особенностью модуля jQuery Form является возможность отправки файлов на сервер без перезагрузки страницы. Загрузка файлов выполняется не с помощью технологии AJAX, а путем создания скрытого тега <iframe>. Однако следует учитывать, что если файл не выбран пользователем, то запрос будет сделан с помощью AJAX. Ответ сервера может быть в формате HTML, XML, JSON или в виде скрипта на JavaScript. В двух последних случаях код следует размещать внутри тега <textarea>:

Код HTML:
Код
<textarea> 
Код скрипта или JSON-объект
</textarea>


Обратите внимание
Ответ в формате XML не поддерживается браузером Safari.

Рассмотрим загрузку файлов на примере. Создадим файл index.php, который будет передавать файл скрипту ajax.php и получать ответ сервера в различных форматах.

Содержимое файла index.php


Код HTML:
Код

<html>
<head>
<title>jQuery Form Plugin. Загрузка файлов на сервер</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script src="jquery-1.3.2.js" type="text/javascript"></script>
<script src="jquery.form.js" type="text/javascript"></script>
<script type="text/javascript">
<!--
var frmReturnType = "";
$(document).ready(function() {
   $("#frm").ajaxForm({
      beforeSubmit: function(dataFrm, obj, option) {
         frmReturnType = $("#returnType").val();
         option.dataType = frmReturnType;
         $("#div1").html("Загрузка...");
         $("#go").enable(false); // Деактивируем кнопку
      },
      success: function(d) { // При отсутствии ошибки
         if (frmReturnType == "html") $("#div1").html(d);
         else if (frmReturnType == "xml") {
            $("#div1").text($("otvet", d).text());
         }
         else if (frmReturnType == "json") {
            $("#div1").text(d.otvet);
         }
         $("#go").enable(true); // Делаем кнопку активной
      },
      error: function() {
         $("#div1").html("Произошла ошибка");
         $("#go").enable(true); // Делаем кнопку активной
      },
      resetForm: true // Устанавливаем значения по умолчанию
   });
});
//-->
</script>
</head>
<body>
<form action="ajax.php" id="frm" method="POST" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="300000">
<input type="file" name="file_name" id="file_name"> 
Ответ в формате: 
<select id="returnType" name="returnType">
<option value="html" selected>html</option>
<option value="xml">xml</option>
<option value="json">json</option>
<option value="script">script</option>
</select>
<input type="submit" name="go" id="go" value="Загрузить файл">
</form>
<b>Ответ сервера:</b><br>
<div id="div1"></div>
</body>
</html>




Содержимое файла ajax.php
Код PHP:
Код
<?php
// Запрет кеширования
header("Expires: Sun, 27 May 2007 01:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Pragma: no-cache");
if (!isset($_POST['returnType'])) {
   header('Content-Type: text/html; charset=utf-8');
   exit('Форма не отправлена');
}
$msg = '';
$ok = true;
if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) 
   && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
   // Запрос выполнен с помощью AJAX. Файл не выбран
   $msg = 'Файл не выбран';
   $ok = false;
}
else {
   if (!isset($_FILES['file_name'])) $msg = 'Файл не загружен';
   elseif ($_FILES['file_name']['error'] == 0
      && $_FILES['file_name']['size'] > 0 
      && $_FILES['file_name']['size'] < 300000) {
      $path = "C:\\Apache\\htdocs\\";
      $path .= basename($_FILES['file_name']['name']);
      $tmp = $_FILES['file_name']['tmp_name'];
      if (@move_uploaded_file($tmp, $path)) {
         $msg = 'Файл успешно загружен';
      }
      else $msg = 'Ошибка при копировании файла';
   }
   else $msg = 'Ошибка при загрузке. Код: ' . $_FILES['file_name']['error'];
}
switch ($_POST['returnType']) {
   case "xml": // Ответ в формате XML
      header('Content-Type: text/xml; charset=utf-8');
      echo '<?xml version="1.0" encoding="utf-8" ?>', "\n";
      echo '<ajax><otvet>' . $msg . '</otvet></ajax>';
      break;
   case "json": // Ответ в формате JSON
      if (!$ok) {
         header('Content-Type: text/javascript; charset=utf-8');
         echo '{ "otvet": "' . $msg . '" }';
      }
      else {
         header('Content-Type: text/html; charset=utf-8');
         echo "<textarea>\n";
         echo '{ "otvet": "' . $msg . '" }';
         echo "</textarea>\n";
      }
      break;
   case "script": // Ответ в виде скрипта
      if (!$ok) {
         header('Content-Type: text/javascript; charset=utf-8');
         echo 'alert("' . $msg . '");';
         echo '$("#div1").text("' . $msg . '");';
      }
      else {
         header('Content-Type: text/html; charset=utf-8');
         echo "<textarea>\n";
         echo 'alert("' . $msg . '");';
         echo '$("#div1").text("' . $msg . '");';
         echo "</textarea>\n";
      }
      break;
   default: // Ответ в формате HTML
      header('Content-Type: text/html; charset=utf-8');
      echo $msg;
      break;
}
?>



скажите, какие изменения произошли в новой версии jQuery Form что теперь нельзя оборачивать код json внутри <textarea>
 ?

Это сообщение отредактировал(а) WebUser - 11.3.2012, 03:35
PM MAIL   Вверх
ksnk
Дата 11.3.2012, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



Вероятно, в jQuery исправили какую-то ошибку. Так как json, который выдается в обрамлении <textarea> - ни разу ни json  smile 

Возможно было бы логичнее в объекте, который выдается в случае ошибки, заводить какой-то флаг. По этому флагу помещать ответ в textareа уже на клиенте, javascript'ом.

Еще один вариант 
Код

 case "json": // Ответ в формате JSON
      if (!$ok) {
         header('Content-Type: application/json; charset=utf-8');
         echo '{ "otvet": "' . $msg . '" }';
      }
      else {
         header('Content-Type: application/json; charset=utf-8');
         echo json_encode( "<textarea>\n". '{ "otvet": "' . $msg . '" }'."</textarea>\n"); //!!
      }
      break;

json_encode проконтролирует все некорректные символы, которые могут быть в получившейся строке.
на Content-Type сам jQuery обращает не очень много внимания, хотя мне кажется так будет правильнее в исторической перспективе...


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0922 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.