2014-02-05 7 views
0

Возможно ли это?Возможно ли иметь две функции обратного вызова с помощью jQuery.post()?

Как только мой jQuery.post будет успешным, а не только с одним обратным вызовом, у меня есть два.

Например

После того, как моя форма успешно отправил данные пустой DIV называется «#msg» дается стиль и содержание И пустой DIV называется «цвет-блок» дается стиль.

код до сих пор

$('#form1').submit(function(e) 
{ 
e.preventDefault(); 
$.ajax({ 
    type: 'POST', 
    url: 'indextest1.php', 
    data: $("#form1").serialize(), 
    success: function(response) { 
$('#msg').html("<div style='border: 1px solid black; padding:15px 50px 15px 20px; width:437px; border-radius: 8px; background:#D3EDD3 url(img/accepted_48.png) no-repeat 450px center;'>Now sit back and relax.....</div>"); 

    } 
    }); 
}); 

Любая помощь или указатели больш были бы оценены.

Вещи, которые я пробовал и не работал!

Добавление другого обратного вызова

$('#form1').submit(function(e) 
{ 
e.preventDefault(); 
$.ajax({ 
    type: 'POST', 
    url: 'indextest1.php', 
    data: $("#form1").serialize(), 
    success: function(response) { 


$('#msg').html("<div style='border: 1px solid black; padding:15px 50px 15px 20px; width:437px; border-radius: 8px; background:#D3EDD3 url(img/accepted_48.png) no-repeat 450px center;'>Now sit back and relax</div>"); 

$("#colour-block").html("<div style='border: 1px solid black; padding:15px 50px 15px 20px; width:437px; border-radius: 8px; background:#D3EDD3 url(img/accepted_48.png) no-repeat 450px center;'>bla bla</div>"); 
    } 
    }); 
}); 

Используя интерфейс Promise

$('#form1').submit(function(e) 
{ 
e.preventDefault(); 
    var ajax = $.ajax({ 
     type : 'POST', 
     url : 'indextest1.php', 
     data : $("#form1").serialize() 
    }).done(function(response) { 

$("#msg").html('<div style='border: 1px solid black; padding:15px 50px 15px 20px; width:437px; border-radius: 8px; background:#D3EDD3 url(img/accepted_48.png) no-repeat 450px center;'>Now sit back and relax while we go to work on your behalf, we\'ll keep you updated with information on our results and if you have any questions then we welcome your calls or emails on 078675675446 or [email protected]</div>'); 

$("#colour-block").html('<div style='border: 1px solid black; padding:15px 50px 15px 20px; width:437px; border-radius: 8px; background:#D3EDD3 url(img/accepted_48.png) no-repeat 450px center;'>Now sit back and relax while we go to work on your behalf, we\'ll keep you updated with information on our results and if you have any questions then we welcome your calls or emails on 078675675446 or [email protected]</div>'); 
    }); 
    }); 
}); 
+2

Не могли бы вы просто обновить свой второй div в той же функции? – Bigood

+0

Я не знаю, возможно. Как я могу это сделать? как это? $ ('# msg' && '# color-block'). html Я только недавно начал использовать/изучать JavaScript, поэтому не слишком уверен. Я просмотрел документацию api и не упоминает ничего подобного. –

+0

О, я бы просто добавил новую строку? $ ('# color-block'). html ............ –

ответ

1

Просто сделай так:

$('#form1').submit(function(e) 
{ 
e.preventDefault(); 
$.ajax({ 
    type: 'POST', 
    url: 'indextest1.php', 
    data: $("#form1").serialize(), 
    success: function(response) { 
     $('#msg').html("<div style='border: 1px solid black; padding:15px 50px 15px 20px; width:437px; border-radius: 8px; background:#D3EDD3 url(img/accepted_48.png) no-repeat 450px center;'>Now sit back and relax.....</div>"); 
     $('.colour-block').css({/*css styles here*/}); 
    } 
    }); 
}); 
+0

Хорошо, казалось бы, добавление второй линии убивает весь jQuery и останавливает его на самом деле. –

+0

@DanCundy Двойная проверка для точек с запятой, заканчивающиеся круглые скобки, конечные кавычки и другой синтаксис. Он должен работать. Кроме того, убедитесь, что вы знаете, что такое синтаксис для jQuery's .css(). Это немного отличается от чистого CSS: http://stackoverflow.com/questions/447197/how-to-define-multiple-css-attributes-in-jquery – zsaat14

+0

Не должно быть никаких дополнительных точек с запятой, заканчивающихся круглых скобок, заканчивая цитаты и т. д., поскольку я добавил только одну дополнительную строку, но, очевидно, меняя свои потребности. –

5

Если вы используете обещание и done, fail и always, вы можете добавить столько, сколько вы хотите, и вы можете делать столько, сколько хотите внутри каждого из них

$('#form1').submit(function(e) { 
    e.preventDefault(); 
    var ajax = $.ajax({ 
     type : 'POST', 
     url : 'indextest1.php', 
     data : $("#form1").serialize() 
    }).done(function(response) { 
      $('#msg').html("<div style='border: 1px solid black; padding:15px 50px 15px 20px; width:437px; border-radius: 8px; background:#D3EDD3 url(img/accepted_48.png) no-repeat 450px center;'>Now sit back and relax.....</div>"); 
      $('#msg2').text('something else'); 
      $('#msg3').css('color', 'red'); 
    }).done(function() { 
      $('.class').text('another callback') 
      $('.class').append('<p>Not sure why you would need it ?</p>') 
    }); 

    ajax.done(function() { 
     $('.class2').txt('This is the same') 
     $('.class3').txt('you can store it in a variable') 
    }); 

    ajax.fail(function() { 
     // this fires if something goes wrong 
    }); 

    ajax.always(function() { 
     // this always fires, both on success and failure 
    }); 
}); 
+0

Эй, аденио, я как раз собирался найти что-нибудь для «сферы отложенного объекта jQuery». Что меня озадачивает, если у меня есть несколько вызовов AJAX, как я могу узнать, куда отправляется решение? Так как вы не можете назвать отложенные, по крайней мере, не сложенными, так? Но есть ли область, как в любой переменной для отложенных? – loveNoHate

+0

@dollarvar - Отложенная функция возвращается из функции, поэтому у нее действительно нет имени, которое вы можете ссылаться, но вы можете просто установить его в переменную, как в ответе выше, или вернуть ее где-нибудь, где вы можете поймать он и т. д. – adeneo

+0

А, я получаю переменную вещь, не смотрю на ваш код, просто хотел увидеть отложенное использование. ;) Однако, что вы имеете в виду с возвращением?Как вы возвращаете отложенные из '$ .ajax()'? – loveNoHate

0

Вы можете обновить свой второй DIV в одной и той же функции.

Вы также можете попытаться экстернализации вашего CSS, и дать вашей внутренней DIVS некоторые ID (или класс, как вы хотите), чтобы их стиль:

success: function(response) { 
    //Create the inner div with the appropriate id, for css styling 
    var msg_inner = $('<div>',{id:'msg-inner', html:'Now sit back and relax...'}); 
    //Same thing for your colour-block div 
    var colour_block_inner = $('<div>',{id:'colour_block-inner', html:'Blah'});  

    $('#msg').append(msg_inner); 
    $('#colour-inner').append(colour_block_inner);  
} 

Со следующим CSS экстернализованный:

#msg-inner{ 
    border: 1px solid black; 
    padding:15px 50px 15px 20px; 
    width:437px; 
    border-radius: 8px; 
    background:#D3EDD3 url(img/accepted_48.png) no-repeat 450px center; 
} 

#colour-block-inner{ 
    /* Your future style here */ 
} 
+0

Простите мое невежество/неопытность, каковы преимущества экстернализации? Для меня это похоже на осложнение. Также я пробовал, как вы сказали, добавив второй, но, похоже, полностью уничтожил ajax. –

+0

@DanCundy В этом весь смысл CSS, отделяйте стиль от контента; относительно «ajax kill», вы могли бы разработать, предоставив ошибку JS (для этого откройте инспектор вашего браузера)? – Bigood

+0

Я использую firebug, и, похоже, нет ошибки? где я смотрю в консоли? Кажется, после различных тестов, что он только принимает одно действие «успех», когда код написан так. Ответ adeneo, возможно, единственный способ сделать это? –

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