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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Использую JQuery.form как получить данные? 
:(
    Опции темы
WebUser
Дата 22.3.2010, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

JS

Код

<script type="text/javascript">
$(document).ready(function() {

   $("#frm").ajaxForm({
      dataType: "json",
      beforeSubmit: function(dataFrm) {

         $("#result").html("Загрузка...");
         $("#go").enable(false); // Деактивируем кнопку
      },
      success: function(d) { // При отсутствии ошибки

            $("#go").enable(true); // Делаем кнопку активной

            var obj = eval(d);

            if(obj.status == "ok"){

               $("#result").html(obj.msg);

            }else{

               $("#result").html(obj.msg);

            }

      },
      error: function() {
         $("#result").html("Произошла ошибка");
         $("#go").enable(true); // Делаем кнопку активной
      },
      resetForm: true // Устанавливаем значения по умолчанию
   });
});
</script>


HTML
Код

<form id="frm" action="ajax.php" 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="300000000">
<input type="file" name="file_name" id="file_name"><br><br>
<input type="submit" name="go" id="go" value="Загрузить файл">
</form>

<b>Ответ сервера:</b><br>
<div id="result"></div>



PHP
Код

<?php
error_reporting(0);

// Запрет кеширования
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");

header('Content-Type: text/html; charset=utf-8');

 $res = array();

 if ($_FILES['file_name']['name'] != ''){

      $path = "C:/wamp/www/jquery/form/upload2/";
      $path .= basename($_FILES['file_name']['name']);
      $tmp = $_FILES['file_name']['tmp_name'];

      if (!@move_uploaded_file($tmp, $path)) {
        $res['msg'][] = 'Файл не удалось загрузить'.$_FILES['file_name']['name'];
      }

 }

 if($_POST['txt1'] == ''){
   $res['msg'][]= '<br><b>Поле txt1</b> не заполнено!';
 }

 if($_POST['txt2'] == ''){
   $res['msg'][]= '<br><b>Поле txt2</b> не заполнено!';
 }

 $output = '';
 $res2 = array();

 if( @sizeof($res['msg']) > 0 ){

   foreach(@$res['msg'] as $index => $val)
   {
      $output .= $val.'<br>';
   }

    $res2['msg'] = $output;
    $res2['err'] = 'error';

 }else{

    $res2['msg'] = '<b>Даные</b> <i>были сохранены успешно</i>';
    $res2['err'] = 'ok';

 }

 echo '{ "msg":"'.$res2['msg'].'", "status":"'.$res2['err'].'" }';
?>


так вот, если в строчке PHP кода укажу ссылку например так

Код
$res2['msg'] = '<b>Даные</b> <i>были сохранены успешно</i><a href="http://www.site.ru">Перейти на главную страницу</a>';


то за место этого выводится сообщение Произошла ошибка из функции error

Код

error: function() {
         $("#result").html("Произошла ошибка");
         $("#go").enable(true); // Делаем кнопку активной
      },


но если эту ссылку передать не через сервер а напрямую прописать в JS вот так

Код

$("#result").html('<a href="http://www.site.ru">Перейти на главную страницу</a>'+obj.msg);


то всё срабатывает нормально. Но это не дело, т.к. ссылку нужно передавать через сервер, поскольку от разных задач адрес ссылки может быть разный. Также от сервера не доступны такие теги <table>, а например эти <b> или <i> проходят нормально. 

Вот подумываю может принимаю данные с сервера не верно

Код

var obj = eval(d);

может как-то обрабатывать нужно, или не в этом совсем дело. Помогите пожалуйста разобраться

я также приложил архив этого скрипта

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  upload.rar 50,85 Kb
PM MAIL   Вверх
ksnk
Дата 22.3.2010, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Слишком много двойных кавычек.



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
WebUser
Дата 22.3.2010, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



да нет, если я за место ссылки укажу например

Код

<table><tr><td>text</td></tr></table>


то будет тоже самое 
PM MAIL   Вверх
ksnk
Дата 22.3.2010, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



У jquery Form plugin нету собственого метода error. Он использует error от самого jquery.
Какой плагин на самом деле используется?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
WebUser
Дата 23.3.2010, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



вот в чём проблема, выяснилsmile

Код

error - Invalid JSON: { "msg":"<b>Даные</b> <i>были сохранены успе"шн"о</i><a href="t">IE</a><table><tbody><tr>
    <td>text</td></tr></tbody></table>", "status":"ok" }


данные формируются не верно для JSON тоесть не валидно, строка не должна содержать переносов строк, также некоторые символы, пришлось экранировать

я решил снова перечитать статью что тут http://wwwadmin.ru/forum/sutra3629.html

и там было написано что нужно отправлять ответ сервера через textarea

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


в PHP скрипте изменил на это

Код

<?php
 $res2['msg'] = str_replace("\r\n","", $res2['msg']);
 $res2['msg'] = str_replace(array("\n","\r","\t"),"",$res2['msg']);

 $res2['msg'] = addslashes($res2['msg']);

 echo "<textarea>\n";
 echo '{ "msg":"'.$res2['msg'].'", "status":"'.$res2['err'].'" }';
 echo "</textarea>\n";
?>


пришлось обработать переменную от строк переноса, а также экранировал символы, иначе через JSON не пройдёт и будет выдавать ошибку. После этого всё стало прекрасно работатьsmile

конечно формируемый HTML код получается обработанный, в одну строку, специальные символы экранированы, также код не должен содержать поле textarea. В прочем это не столько важно, тут всего будет небольшой ответ от сервера ввиде HTML кода, которого не так много будет, этого в пол не достаточно для обычного сообщения.


И остался последний вопрос, поскольку будет не одна форма, и не обязательно на одной странице несколько, то не хотелось под каждую форму писать/копировать этот код, решил сделать виде отдельной функцией, потом только передавать id формы через параметр id.

Вот пример того как сделал

Код

<script type="text/javascript">

function myAjaxForm(id) {

   $("#"+id).ajaxForm({

      dataType: "json",
      beforeSubmit: function(dataFrm) {

         $("#result").html("Загрузка...");
         $("#go").enable(false); // Деактивируем кнопку
      },
      success: function(d) { // При отсутствии ошибки

            $("#go").enable(true); // Делаем кнопку активной

            if(d.status == "ok"){

               $("#result").html(d.msg);
               $("#frm").hide('normal');

            }else{

               $("#result").html(d.msg);

            }

      },
      error: function(xhr, status, errMsg) {
         //alert(status+' - '+errMsg)
         $("#result").html("Произошла ошибка");
         $("#go").enable(true); // Делаем кнопку активной
      },
      resetForm: true
   });
}
</script>


Код
<form id="frm" action="ajax.php" 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="300000000">
<input type="file" name="file_name" id="file_name"><br><br>
<input type="submit" name="go" id="go" onclick="myAjaxForm('frm');" value="Загрузить файл">
</form>

<b>Ответ сервера:</b><br>
<div id="result"></div>


по примеру видно что я весь JS код поместил в функцию  myAjaxForm(id) а внутри формы для кнопки прописал её onclick="myAjaxForm('frm');" теперь после нажатии на кнопку, функция отправит данные полей формы id="frm"
Проверил во всех браузерах работает нормально, единственное в IE8 при повторном нажатии кнопки, появляется в отладчике такая ошибка 

Код
'null' -  есть null или не является объектом  jquery-1.4.2.js, строка 1919 символ 45


где строка 1919
Код
var events = jQuery.data(this, "events"), handlers = events[ event.type ];


и символ 45 указывает на первую букву слова handlers 

что может быть и как от этого избавится?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




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


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

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