2010-03-24 3 views
2

Я использую расширение формы JQuery для отправки формы с помощью AJAX. У меня есть следующий код:JQuery Form ajaxSubmit не отправляет

var options = { 
    beforeSubmit: showRequest, // pre-submit callback 
    success:  showResponse, // post-submit callback 

    // other available options: 
    //url:  url   // override for form's 'action' attribute 
    //type:  'post',  // 'get' or 'post', override for form's 'method' attribute 
    //dataType: null  // 'xml', 'script', or 'json' (expected server response type) 
    clearForm: true,  // clear all form fields after successful submit 
    //resetForm: true  // reset the form after successful submit 

    // $.ajax options can be used here too, for example: 
    timeout: 3000 
}; 


$('#composeForm').submit(function() { 
    // inside event callbacks 'this' is the DOM element so we first 
    // wrap it in a jQuery object and then invoke ajaxSubmit 
$(this).find(':disabled').removeAttr('disabled'); 

    $(this).ajaxSubmit(options); 

    // !!! Important !!! 
    // always return false to prevent standard browser submit and page navigation 
    return false; 
}); 

Проблема заключается в том, что форма не представляется представит, или по крайней мере функция успеха не вызывается. Если я удаляю return false, то представление работает, но страница переходит. Есть ли проблема в моем коде, которая может быть причиной этого?

Cheers, Gazler.

EDIT | Кажется, работает над моим локальным хостом. Может ли это быть чем-то связанным с тем, что домен является дополнительным доменом?

+0

Когда вы смотрите на информацию XMLHttpRequest с Firebug, что вы видите? – Pointy

+0

Спасибо, я не знал об этой функции в firebug. Я получил 403 Forbidden ответ, что странно, учитывая, что если я удаляю return false, то он отлично работает. – Gazler

+0

Скучайте от темы. Я думаю, что использование e.preventDefault() было бы лучшим выбором, чем возвращение false. – xandy

ответ

2

Я предполагаю, что когда вы удаляете ложь, ваша обычная подача происходит - она ​​не работает вообще в обоих случаях.

Думаю, вам нужно иметь правильные значения для большего количества параметров. В нем много чего прокомментировано. Кроме того, было бы лучше, если бы вы просто использовали кнопку для отправки, а не для отправки формы, тогда вам не нужно беспокоиться о попытке отключить средства автоматической магии, которые делает браузер.

+0

Подача работает, если она является обычной подачей. – Gazler

+0

Точно - если вы хотите сделать работу jQuery ajax submit, используйте кнопку, чтобы вы не взаимодействовали с другим submit таким образом, будет легче решить проблему. – Hogan

3

Вот попробуйте следующее:

$(document).ready(function(){ 
     $("#composeForm").submit(function(){ 
       var str = $(this).serialize(); 
       var formAction = $(this).attr("action"); 
       $(this).find(':disabled').attr('disabled',''); 

$.ajax({ 
     type: "POST", 
     url: formAction, 
     data: str, 
     beforeSubmit: showRequest, 
     success: showResponse 
     }); 

    return false; 

    }); 

}); 
+2

Это будет работать, но не с изображениями. Я считаю, что они не могут быть отправлены изначально через XMLHTTPRequest. – Gazler

+0

@ Gazler это первый раз, когда вы упоминаете изображения .. – ant

1

Добавление собственного решения,

Опция IFrame должно быть:

iframe: true 

Какие решить эту проблему.

Спасибо всем за их вклад.

0

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

Смежные вопросы