2014-02-05 80 views
0

這可能嗎?是否有可能通過jQuery.post()有兩個成功的回調函數?

一旦我的jQuery.post成功,而不是隻有一個成功回調我有兩個。

例如

一旦我的形式成功地發佈了一個名爲「#msg」空div給出的風格和內容給出一個所謂的「色塊」空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>"); 
    } 
    }); 
}); 

使用無極接口

$('#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的.css()的語法是什麼。它與純CSS不同:http://stackoverflow.com/questions/447197/how-to-define-multiple-css-attributes-in-jquery – zsaat14

+0

不應該有任何額外的分號,結束括號,結束報價等,因爲我只增加了一條額外的線,但顯然改變了我的需求。 –

5

如果您使用的承諾和donefailalways,你可以添加你想要儘可能多的,你可以盡你所能地做到每個人都可以做到

$('#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

嘿,adeneo,我正要爲「延期對象jQuery的範圍」找到任何東西。令我感到困惑的是,如果我有幾個AJAX調用,我怎麼知道決定發送到哪裏?既然你不能命名延遲,至少不會延遲inbuild,對吧?但是有沒有一個範圍,就像任何變量中的延期? – loveNoHate

+0

@dollarvar - deferred是從函數返回的,所以它沒有真正的名字可以引用,但是你可以將它設置爲一個變量,就像在上面的答案中一樣,或者將它返回到你可以捕獲的地方它等。 – adeneo

+0

嗯,我得到的變量的東西,沒有看你的代碼,只是想看到延期使用。 ;)但是,你的回報是什麼意思?你如何從'$ .ajax()'返回延期? – loveNoHate

0

您可以更新相同功能的第二個div。

您也可以嘗試外部化你的CSS,並給予你內心的div一些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

原諒我的無知/缺乏經驗,外化有什麼好處?對我來說,這似乎是一個過於複雜。此外,我已經嘗試像你說的加入一秒,但它似乎完全殺死阿賈克斯。 –

+0

@DanCundy這就是CSS的重點,將風格與內容分開;關於'ajax kill',你能否通過提供JS錯誤來闡述(打開你的瀏覽器的檢查器)? – Bigood

+0

我使用螢火蟲,它似乎沒有錯誤?我在哪裏看控制檯?在各種測試中,我似乎認爲它只是接受一個「成功」的動作,而代碼是這樣寫的。 adeneo的答案也許是唯一的辦法嗎? –

相關問題