Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.08.2009, 00:16
Новичок на форуме
Отправить личное сообщение для Ксандер Посмотреть профиль Найти все сообщения от Ксандер
 
Регистрация: 16.08.2009
Сообщений: 6

Ошибка в jquery.forms ? Помогите разобраться.
Страничка состоит из формы.
На форме все поля "обычные" - селекты, инпуты.
И одно поле - для аплоада картинок.

По сабмиту данные отсылаются и анализируется ответ в формате JSON.

За обработку отвечает следующая функция:
$(document).ready(function() {
    var my_success = function(resp, st) {
    ...
    }
    $("#my_form").submit(function() {
        set_varlen_data();
    });
    $("#my_form").ajaxForm({dataType: 'json', success: my_success});
});


собсно функция my_success обрабатывает ответ JSON.

Так вот. Если вводятся все поля КРОМЕ картинки(её аплоада) - то
посылается браузером "нормальный" запрос

Заголовки запроса
Host room404.no-ip.org:8081
User-Agent Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.13) Gecko/2009073022 Firefox/3.0.13 (.NET CLR 3.5.30729)
Accept application/json, text/javascript, */*
Accept-Language ru,en-us;q=0.7,en;q=0.3
Accept-Encoding gzip,deflate
Accept-Charset windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive 300
Connection keep-alive
Content-Type application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With XMLHttpRequest
Referer http://room404.no-ip.org:8081/input/
Content-Length 186
Cookie sessionid=ac0b8ea2b1598ae4f3650fde85a29f30

И получается нормальный ответ

Заголовки ответа
Date Sat, 15 Aug 2009 12:31:09 GMT
Server WSGIServer/0.1 Python/2.6.2
Content-Type application/json

Соответственно был запрошен json, он отработался в my_success
и отрисовались либо сообщения об ошибке, либо всё как должно было быть.


Если же среди данных есть ВВЕДЁННАЯ КАРТИНКА(на аплоад) - посылается "неправильный" запрос(почему- так и не понял. На дебаге застрял, пишу сюда....)

Заголовки запроса
Host room404.no-ip.org:8081
User-Agent Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.13) Gecko/2009073022 Firefox/3.0.13 (.NET CLR 3.5.30729)
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language ru,en-us;q=0.7,en;q=0.3
Accept-Encoding gzip,deflate
Accept-Charset windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive 300
Connection keep-alive
Referer http://room404.no-ip.org:8081/input/
Cookie sessionid=ac0b8ea2b1598ae4f3650fde85a29f30

Но на сервере написано, что этой форме всё-равно нужно отдавать json,
(она должна смочь обрабатывать json) - это можно заблокировать, но пока идёт отладка. Вообщем ситуация обычная.

Заголовки ответа
Date Sat, 15 Aug 2009 12:23:46 GMT
Server WSGIServer/0.1 Python/2.6.2
Content-Type application/json

Вот такой вот ответ. В следствие того, что сервер не интерпретирует(видимо) это как json - выскакивает окошко "сохранить файл, который является application/json" - а этот ответ должна была обработать функция my_success, забиндиная ajaxForm ещё в document.ready......

Одним словом - надо сделать так, чтобы и с картинкой работало. Т.е. чтобы и с картинкой запрашивался json.... И на него биндился my_success....

Где ошибка - ума не приложу... Вожусь уже 4й день. Гугл и форум никаких результатов не дал(
Ответить с цитированием
  #2 (permalink)  
Старый 17.08.2009, 01:37
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

Странно, на самом деле. Попробуйте вот так:
$("#my_form").ajaxForm(
    {
        dataType: 'json',
        success: my_success,
        beforeSend: function(xhr) {
            xhr.setRequestHeader("Accept", "application/json, text/javascript, */*");
            return true;
        } 
    }
);


А вообще с application/json одни проблемы...
Ответить с цитированием
  #3 (permalink)  
Старый 17.08.2009, 13:34
Новичок на форуме
Отправить личное сообщение для Ксандер Посмотреть профиль Найти все сообщения от Ксандер
 
Регистрация: 16.08.2009
Сообщений: 6

Попробовал. Ничего не меняется, даже заголовки всё теже(

Может на document.ready ajaxForm ставится на форму, которая описывается в http без mime заголовков, но когда я вкладываю файл, то всё, что я забиндил анбиндится, ибо это уже форма с mime заголовками?... Но ведь это должно было быть предусмотрено...

Может у кого ещё какие-нибудь соображения?
Ответить с цитированием
  #4 (permalink)  
Старый 18.08.2009, 15:34
Новичок на форуме
Отправить личное сообщение для Ксандер Посмотреть профиль Найти все сообщения от Ксандер
 
Регистрация: 16.08.2009
Сообщений: 6

Наконец-то додумался=) Заглянуть в консоль ошибок.
Если передаю форму обычным post-ом, то всё чисто.
Если аплоадю файл - выдаётся следующая ошибка

Ошибка: uncaught exception: [Exception... "Component returned failure code: 0xc1f30001 (NS_ERROR_NOT_INITIALIZED) [nsIMIMEInfo.primaryExtension]" nsresult: "0xc1f30001 (NS_ERROR_NOT_INITIALIZED)" location: "JS frame :: chrome://dotnetassistant/content/contenttype.js :: anonymous :: line 44" data: no]


у кого какие соображения по этому поводу?
И главное, чего посоветуете делать?
Ответить с цитированием
  #5 (permalink)  
Старый 18.08.2009, 15:49
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Ксандер
И главное, чего посоветуете делать?
удалить расширение dotnetassistant и посмотреть что получится.
Ответить с цитированием
  #6 (permalink)  
Старый 18.08.2009, 18:29
Новичок на форуме
Отправить личное сообщение для Ксандер Посмотреть профиль Найти все сообщения от Ксандер
 
Регистрация: 16.08.2009
Сообщений: 6

Удалил эксепшн-то исчез. Но это не он влиял( В эксплорере - то же самое...
Ответить с цитированием
  #7 (permalink)  
Старый 18.08.2009, 22:05
Новичок на форуме
Отправить личное сообщение для Ксандер Посмотреть профиль Найти все сообщения от Ксандер
 
Регистрация: 16.08.2009
Сообщений: 6

Сидел в дебаге. Выяснил следующее.

Использую
* jQuery Form Plugin
* version: 2.18 (06-JAN-2009)
* @requires jQuery v1.2.2 or later

Сам jquery.form в 253 строчке устанавливает обработчик
io.attachEvent ? io.attachEvent('onload', cb) : io.addEventListener('load', cb, false);

Затем этот обработчик срабатывает и в 311 строчке передаёт управление ajaxSuccess.... Т.е. моей функции. В идеале всё должно работать так, как на
http://spiritzzz.com/files/jquery_upload/

Но у меня толи обработчик не устанавливается, толи функции не передаётся управление. вообщем факт в том, что функция cb() даже не вызывается(которая вешается на 'load') .....

Вопрос. Почему она может не вызываться? Если она вызывается на вышеуказанной ссылке.....
Ответить с цитированием
  #8 (permalink)  
Старый 26.08.2009, 07:37
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

дело в том, что отправка файлов организуется с помощью скрытого фрейма, а не xmlhttprequest. А если попытаться загрузить в фрейм application/json, то появляется окно сохранения файла

1.html:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
	<title>title</title>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<form id="my_form" target="asd" action="1.php" enctype="multipart/form-data">
<input type="file" name="asd">
<input type="submit">
</form>
<iframe name="asd" src="about:blank"></iframe>
</body>
</html>


1.php:
<?php header( 'Content-Type: application/json' ); ?>
{a: 123}
Ответить с цитированием
  #9 (permalink)  
Старый 26.08.2009, 13:24
Новичок на форуме
Отправить личное сообщение для Ксандер Посмотреть профиль Найти все сообщения от Ксандер
 
Регистрация: 16.08.2009
Сообщений: 6

Спасибо, уже разобрался) Только мне за незнанием матчасти пришлось для этого передебажить весь jQuery.forms )) Но всё-равно приятно. Одним словом, ошибка обнаружилась в jQuery.forms. Ибо параметр dataType можно ставить application/json - там этого нигде не проверяется насчёт совместимости с фреймой и отправкой файлов. А обидно, надеюсь в следующих релизах исправят. пока что отправляю хтмл, и потом его уже делаю evalJSON. Там ещё есть некоторое шаманство с этим связанное)

Но всё-равно спасибо. Приятно видеть, что всё-тки есть люди, знающие матчасть Теперь буду знать, к кому обратиться за помощью
Ответить с цитированием
  #10 (permalink)  
Старый 26.08.2009, 17:44
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от Ксандер
Одним словом, ошибка обнаружилась в jQuery.forms
а что, можно как-то заставить firefox отправлять файл через фрейм и принимать в этот фрейм application/json без окна сохранения?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобраться с Dojo greendoc Dojo toolkit 4 13.10.2011 18:19
Помогите разобраться с кодом. TheWanderer Общие вопросы Javascript 10 17.04.2010 13:41
Помогите разобраться со скриптом! Чайник Элементы интерфейса 1 13.03.2009 23:57
Помогите разобраться с логикой поведения скрипта MarkupDeveloper jQuery 3 21.06.2008 18:04
Помогите разобраться с проблемой SergeiAzarov (X)HTML/CSS 0 28.03.2008 18:51