2013-08-05 3 views
2

В настоящее время я пытаюсь запустить действие в моем контроллере grails при загрузке страницы в моем приложении, которое запустит поток, продолжит выполнение задачи. . Я до сих пор еще не удалось успешно реализовать это в Это мой код:Запустить действие при загрузке и остаться на той же странице

$(document).ready(function(){ 
    var $form = $("#background_thread"); 
    $form.submit(function(e){ 
     e.preventDefault(); 
     $.post($(this).attr("background"), $(this).serialize(), function(data){ 
      alert("should work" + data) 
     }); 
     return false; 
    }); 
}); 

Я не могу за жизнь мне понять, почему это не работает. Есть ли какой-то простой синтаксис, который я пропускаю, или по-другому я должен это делать?

Update:

Моя форма идентификатор #background_thread и я пытаюсь сделать это асинхронно, так что страница будет по-прежнему остаются теми же и мое действие будет работать.

Мой сценарий запускается, но не работает $form.submit(function(e){ и не пройдет.

+0

Вы отправляете форму на странице load ?? –

+0

Я пытаюсь либо отправить форму на странице, либо загрузить ее на ту же страницу, либо выполнить это конкретное действие при загрузке. Действие нужно просто запустить. – thehoule64

ответ

2

Вам необходимо предотвратить поведение по умолчанию в событии, которое было создано.

$form.submit(function(e){ 
    e.preventDefault(); 
    // your code 
} 

Обновление:

Вам, безусловно, необходимо добавить выше, независимо, как только вы получите общий скрипт работает. Кроме того, добавьте свою разметку в вопрос. Несколько основных вопросов:

Является #background_thread идентификатором вашей формы?

На вкладке вашей сети в Chrome Inspector (или аналогичном) запрашивается запрос?

Является ли разметка поставляемой асинхронно, как если бы она была, вам нужно использовать .on, чтобы прикрепить событие навсегда, а не только базовый селектор?

Update 2:

Ваша форма доставляется асинхронно сама, поэтому ваше attaqchement событие должно измениться на:

$(document).ready(function(){ 
    $("body").on("submit", "#background_thread", function(e){ 
     e.preventDefault(); 
     $.post($(this).attr("background"), $(this).serialize(), function(data){ 
      alert("should work" + data) 
     }); 
     return false; 
    }); 
}); 

Итак, чтобы объяснить, ваша привязанность событие происходит во время документа готов. Документ готов к пожару, но форма еще не доставлена ​​в DOM, поэтому у него нет привязки к нему. Поэтому вы используете on() для постоянного прикрепления этого события к этому элементу в течение всего времени рендеринга всей страницы в браузере.

N.B. Я приложил его к телу, чтобы начать прослушивать подачу на тот момент, на практике вы бы не сделали это по многим причинам, вы должны были прикрепить его к самой внешней точке замены AJAX для формы, по существу, ближайшего родителя к форма, которая будет известна при начальной загрузке страницы.

Я надеюсь, что это было полезно и удачи с вашим приложением.

+0

К сожалению, это не сработает. Я сделал немного больше отладки и обнаружил, что как только он попадает в '$ form.submit (function()', он не продолжается. Любые идеи относительно того, почему это произойдет? – thehoule64

+0

Посмотрите в консоль, чтобы увидеть, есть ли ошибка для пример получения URL-адреса для сообщения – mplungjan

+0

Нет никого, что заставляет меня сомневаться в том, что происходит еще больше. – thehoule64

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