2011-05-26 86 views
0

我想知道为什么我的代码没有更新ajax调用,当我点击一个按钮。它只显示页面刷新后显示。我下面的代码:

下面是完整的jQuery/JavaScript代码: $(文件)。就绪(函数(){ $( “#savesubmainbutton”)生活( '点击',函数(){

  $.post('save-sub-main.php', $("#submainform").serialize(), function(data) { 
       $('#submain_save_message').html(data); 
      }); 

      $('#submain').hide(); 

      // Load data after submission 
       $.get('getsubmain.php', { mainid: "<?php echo $_GET['id']; ?>" }, 
       function(data) { 
        $('.submain_message').html(data); 

       }); 



     }); 

    }); //end 

这是HTML表单部分

<div id="submain"> 

    <form id="submainform" name="submainform" method="post" action="" enctype="multipart/form-data" > 
    <table><input type="hidden" name="MAX_FILE_SIZE" value="1000000" /> 
    <!--<tr><td width="289" align="right">Jou naam:</td><td><input type="text" name="yourname" id="yourname" style="background-color:lightblue;" /></td></tr> 
    <tr><td width="289" align="right">Jou e-posadres:</td><td><input type="text" name="email" id="email" style="background-color:lightblue;"/></td></tr>--> 
    <tr><td width="289" align="right">Naam van die geskiedkundige figuur (bv. Jan van Riebeeck):</td><td><input type="text" name="name" id="name" /></td></tr> 
    <tr><td width="289" align="right">Foto van die geskiedkundige figuur :</td><td><input id="file_upload" name="file_upload" type="file" /></td></tr> 
    <tr><td width="289" align="right"><div id="filname"></div></td><td><input id="filename2" name="image" type="hidden" value="" /></td></tr> 
    <!--<tr><td width="289" align="right">Naam van jou inskrywing :</td><td><input type="text" name="title" id="title" /></td></tr>--> 
    <tr><td width="289" align="right">Datum waarop die inskrywing gemaak is (bv. 1652):</td><td><input type="text" name="date" id="date" /></td></tr> 
    <tr><td width="289" align="right">Status update (bv. Wat sien ek daar in die verte? Is dit 'n tafel?):</td><td><textarea name="message" id="message"></textarea></td></tr> 
    <input type="hidden" name="mainid" value="<?php echo $_GET['id']; ?>" /> 
    <tr><td></td><td><div id="savesubmainbutton" style="color:blue"><input type="button" value="Save" /></div></td></tr> 
    </table> 
    </form> 

+1

不要这样做! 'mainid:“<?php echo $ _GET ['id'];?>”'!! **从不**先使用请求参数。 – Tomalak 2011-05-26 11:20:53

+0

你可以在这里发布你的php/html代码吗(按钮) – 2011-05-26 11:21:52

+0

你也可以发布标记,这将有助于在你的脚本中的各种元素在某种情况下。 – Xhalent 2011-05-26 11:22:12

回答

2

记住你的Ajax调用是异步 - 所以在你得到的是E中的后一直没有返回的数据执行 - 如图所示更改您的代码。

$(document).ready(function() { 

// Save SubMain data 
    $("#savesubmainbutton").live('click',function(){ 

     $.post('save-sub-main.php', $("#submainform").serialize(), function(data) { 
      $('#submain_save_message').html(data); 
      $('#submain').hide(); 

     // Load data after submission 
      $.get('getsubmain.php', { mainid: "<?php echo $_GET['id']; ?>" }, 
      function(data) { 
       $('.submain_message').html(data); 

      }); 

     }); 





    }); 

}); //结束

+0

谢谢你的帮助。真的很感谢帮助。 – 2011-05-26 11:41:19

+0

不客气! – BonyT 2011-05-26 11:45:35

2

您的$.get未在$.post的回调中被调用。因此,$.get正在运行,但由于数据尚未提交,因此不会返回任何新数据。

如果您将$.get移到回调函数内,它应该按预期工作。

尽管不打扰第二个ajax调用会更好更高效,而只是返回$.post的返回数据中的$.get的数据。

类似于下面的内容,假设您将数据作为json对象返回,因此您可以简单地为响应的两个不同部分分配两个变量。

$.post('save-sub-main.php', $("#submainform").serialize(), function(data) { 
     $('#submain_save_message').html(data.save_message); 
     $('#submain').hide(); 
     $('.submain_message').html(data.return_data); 
    },'json'); 
0

获取请求可以通过浏览器,如果他们使用相同的参数缓存,见here了解更多详情。

您可以使用POST或添加一个虚拟参数,如ticks或当前时间,这些参数会有所不同,从而不会强制GET不被缓存。

0

一些意见。如果要替换默认的提交行为,最好确保取消点击事件,否则表单的默认行为将发生。

此外,帖子是异步的,所以您需要确保您想要执行的任何后续工作都在回调函数中完成。