Как передать и получить ответ от сервера?
здравствуйте, пытаюсь сделать отправку данных в месте с файлом, всё отправляются нормально, но решил сделать сообщение с сервера клиенту, об ошибке или об успешной передаче, собственно вот код
<script src="jquery-1.4.2.min.js" type="text/javascript"></script> <script src="jquery.form.js" type="text/javascript"></script> <script type="text/javascript"> <!-- $(document).ready(function() { $("#frm").ajaxForm({ // dataType: "json", beforeSubmit: function(dataFrm, obj, option) { $("#result_load").show(); $("#result_load").html("Загрузка..."); $("#go").enable(false); // Деактивируем кнопку }, success: function(data){ var res = JSON.parse(data); if (res['err']=='1'){ $("#result_load").hide(); $("#result").html(res['msg']); $("#go").enable(true); // Делаем кнопку активной }else{ $("#result_load").hide(); $("#result").html(res['msg']); $("#go").enable(true); // Делаем кнопку активной } }, clearForm: true // Устанавливаем значения по умолчанию }); }); //--> </script> <div id="result_load"></div> <form action="upload.php" id="frm" method="POST" enctype="multipart/form-data"> <input type="text" name="txt1"><br> <input type="text" name="txt2" value="Текст"><br> <input type="hidden" name="MAX_FILE_SIZE" value="30000000"> <input type="file" name="file_name"> <input type="submit" name="go" id="go" value="Загрузить файл"> </form> <b>Ответ сервера:</b><br> <div id="result"></div> <?php header('Content-Type: text/html; charset=utf-8'); $res = array(); if($_POST['txt1'] == ''){ $res['msg'][] = 'Поле txt1 не заполнено!'; } if($_POST['txt2'] == ''){ $res['msg'][] = 'Поле txt2 не заполнено!'; } if (!isset($_FILES['file_name'])) { $res['msg'][] = 'Файл не выбран'; }elseif($_FILES['file_name']['error'] == 0 && $_FILES['file_name']['size'] > 0 && $_FILES['file_name']['size'] < 30000000) { $path = "C:/wamp/www/jquery/form/"; $path .= basename($_FILES['file_name']['name']); $tmp = $_FILES['file_name']['tmp_name']; if (!@move_uploaded_file($tmp, $path)) { $res['msg'][] = 'Ошибка при копировании файла'; } }else{ $res['msg'][] = 'Ошибка при загрузке. Код: ' . $_FILES['file_name']['error']; } $output = ''; $res2 = array(); if( @sizeof($res['msg']) > 0 ){ foreach(@$res['msg'] as $index => $val) { $output .= $val.'<br>'; } $res2['msg'] = $output; $res2['err'] = '1'; }else{ $res2['msg'] = 'Даные были сохранены успешно'; $res2['err'] = '0'; } echo '{"msg":"'.$res2['msg'].'","err":"'.$res2['err'].'"}'; ?> проверил в FireFox 3.6 и Chrome всё работает нормально, а в IE8 выдаёт такую ошибку Код:
Сообщение: 'JSON' - определение отсутствует в опере 10 выдаёт Код:
{"msg":"Поле txt1 не заполнено!<br>Поле txt2 не заполнено!<br>","err":"1"} каким образом определить JSON то что просит IE сделать? ещё, если убераю коментарии в коде JS в этой строчке // dataType: "json", то но водном браузере не работает |
отвечаю сам на свой же вопрос)
нужно заменить эту строчку var res = JSON.parse(data); на эту var res = eval('(' + data + ')'); или на эту var res = jQuery.parseJSON(data); сделал последний вариант, вроде как parseJSON хвалят больше ежели eval Теперь хотелось всё это обвернуть в одну функцию как то так function myAjaxForm(id) { .. выше упомянутый код .. } где в качестве аргумента id в функции указываем id формы, тоесть то что указывается тут <form action="upload.php" id="frm" method="POST" enctype="multipart/form-data"> эта часть id="frm" т.к. функцию планирую использовать для много форм, и чтобы каждый раз не копировать по несколько раз для каждой формы, хотелось одну функцию для всех, просто передавая id формы |
по пытался сделать таким образом, весь js код поместил в функцию
function myAjaxForm(id) { ... } также в js коде изменил это $("#frm").ajaxForm({ на это $("#"+id).ajaxForm({ всё остальное оставил без изменений а в HTML форме изменил так <form action="upload.php" id="frm" method="POST" enctype="multipart/form-data"> <input type="submit" name="go" id="go" onclick="myAjaxForm('frm');" value="Загрузить файл"> таким образом хотелось бы при нажатии на кнопку, сработала функция myAjaxForm которой был передан id формы что прописано в теге <form id="frm"> проверил в FireFox работает нормально также в Chrome, а вот в IE8 неработает, выдаёт такую ошибку Код:
Строка: 28 Подскажите плиз. что не так делаю? |
Цитата:
jQuery - тоже не решение, не все хотят и могут с ним работать проблема решается добавлением правильного !DOCTYPE в документ |
Цитата:
|
vladkras - JavaScript клиентский язык и работает на стороне клиента!)) Улыбнуло!)
|
Цитата:
JSON::Вопросы безопасности никто не отменял, речь идет об обработке данных с сервера, вредоносный код помещается именно в них, чтобы выполнить на клиенте, учите матчасть Цитата:
и вообще http://api.jquery.com/jQuery.parseJSON/ |
vladkras,
давайте вы приведёте примерный сценарий атаки на сайт, который использует eval. |
Цитата:
|
И причём здесь eval?
|
Часовой пояс GMT +3, время: 17:45. |