|
|
|
| как только обновился до версии - 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>
? | |
|
|