2013-04-26 3 views
2

У меня есть приложение, которое использует Sammy для некоторой простой маршрутизации на стороне клиента.Сэмми перехватывает POST, который не является одним из добавленных маршрутов

На одной из страниц есть кнопка «Загрузить Pdf», которая должна выполнить POST, чтобы загрузить и загрузить документ в формате PDF (не очень рестенный, я знаю, но он должен быть POST из-за большого количества данные, которые я отправляю). Он делает это, используя старый трюк динамического создания, заполнения и подачи элемента <form>.

Все работает нормально, за исключением того, что я вижу на консоли ошибку от sammy, что мой маршрут не найден. Обратите внимание, что это не маршрут или даже глагол, который должен обрабатывать Сэмми.

Here is my reduced test case

Sammy(function initializeClientRouting(app) { 
    app.get('#/', show('#default')); 
    app.get('#/test', show('#test')); 

    function show(selector) { return function() { 
    $('section').slideUp(); 
    $(selector).slideDown(); 
    }; } 
}).run('#/'); 

$('button').click(function() { 
    var form = $("<form method=post action: 'http://www.google.com'>").hide(); 
    $('<textarea name=q>').text("search text").appendTo(form); 
    form.appendTo('body').submit().remove(); 
}); 

Кто-нибудь знает, как предотвратить эту ошибку? Это ошибка в Сэмми?

+1

Помогает ли это: http://stackoverflow.com/a/15750652/1014822? – JcFx

+0

@JcFx - нет, тестовый пример с этим исправлением: http://jsbin.com/ubuser/5/ Я думаю, что это должно быть ошибка –

ответ

1

Это комбинация sammy & Поведение JQuery (ошибка?). Когда генерируется динамически, как вы выразились, форма тега отображаются как

<form www.google.com'="" 'http:="" action:="" method="post"> 

Это будет пытаться POST на текущую страницу, которая, вероятно, является чем-то вроде

http://blah/# or http://blah/#/test 

По какой-то причине, Сэмми будет запускаться из-за хэштега, не обнаружив POST и не зарегистрировав ошибку.

возился с вашим примером, что сработало для меня было:

var form = $("<form>"); 
    form.attr('method', 'post'); 
    form.attr('action', 'http://www.google.com'); 
    $('<textarea name=q>').text("search text").appendTo(form); 
    form.appendTo('body').submit().remove(); 

Это, казалось, генерировать правильный HTML и устранить ошибку Сэмми.

+0

Извините, но [ваш код] (http://jsbin.com/ubuser/ 7/edit) не удаляет ошибку sammy. Кроме того [здесь убрана версия] (http://jsbin.com/ubuser/6/edit) с определенно правильным html-генератором (требуется хром). Еще ошибка. Очевидно, что ошибка лежит в пределах sammy –