Показать сообщение отдельно
  #1 (permalink)  
Старый 17.03.2010, 22:37
Аспирант
Отправить личное сообщение для Simon Посмотреть профиль Найти все сообщения от Simon
 
Регистрация: 25.11.2008
Сообщений: 31

Как передать и получить ответ от сервера?
здравствуйте, пытаюсь сделать отправку данных в месте с файлом, всё отправляются нормально, но решил сделать сообщение с сервера клиенту, об ошибке или об успешной передаче, собственно вот код

<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' - определение отсутствует
Строка: 23
Символ: 7
Код: 0
URI-код: http://localhost/jquery/form/index.php
23 строка это: var res = JSON.parse(data);

в опере 10 выдаёт

Код:
{"msg":"Поле txt1 не заполнено!<br>Поле txt2 не заполнено!<br>","err":"1"}
подскажите что делаю не так?
каким образом определить JSON то что просит IE сделать?

ещё, если убераю коментарии в коде JS в этой строчке
// dataType: "json",

то но водном браузере не работает

Последний раз редактировалось Simon, 17.03.2010 в 22:43.
Ответить с цитированием