如何调用页面上没有提交按钮的JS/ajax?

如何调用页面上没有提交按钮的JS/ajax?

问题描述:

我有一个网站页面,其中只包含一个字段给出收件箱中邮件数量的数据,而且我需要随时刷新这些邮件,以便用户在此页面上可以看到有新消息。我怎么能打电话给我的JS/ajax来做更新?如何调用页面上没有提交按钮的JS/ajax?

我试过header(“Refresh:10”);但客户并不满意,因为它刷新了整个页面,他只希望消息不要刷新,因为他们进来...有人可以帮忙吗?感谢

我这个页面代码:

<?php use_stylesheets_for_form($search_form) ?> 
<?php use_javascripts_for_form($search_form) ?> 
<div id='div_longgray_gradient2'> 
<div id='div_float_img'> 
<br/> 
<table width='96%' border='0'> 
<tr> 
    <td colspan='2' align='right'> 
    <form action="<?php echo url_for('profiles/search') ?>" method="post" > 
     <table> 
     <tr> 
     <td> 
     <span class='spn_med_lightblue_rbc'>Profile Search &nbsp;&nbsp; 
     </span> 
     <?php echo $search_form['uc_other']->render(array('default')); ?>  </td> 
     <td><input class='submit_img' type="image" src="/images/rainbow/gobuttonbluesmall.png" value="Submit" alt="Submit"></td> 
    </tr> 
      </table> 
      </form> 
    </td> 
    </tr> 
    <tr> 
    <td rowspan='2' width='40px' align='left'> 
     <img src='/images/rainbow/arrow.png'> 
    </td> 
    <td align='left'> 
     <span class='spn_big_black_rbc'>WELCOME <?php echo $usr_profile->getName() ?></span> 
    </td> 
    <td align='left'> 
    <?php  
     if (0) 
     { 
     // $filename = $usr_profile->getMsisdn(); 
     $filename = $usr_profile->getProfilePicPath(); 
     if ($filename && file_exists($filename)) 
     {     
      $source = imagecreatefromjpeg($filename); 
     } 
     else 
     {     
      $filename = $usr_profile->getDefaultProfilePicPath(); 
      $source = imagecreatefromjpeg($filename); 
      echo "<span class='spn_big_black_rbc'>You have not uploaded an image yet</span>";     
     } 

    } 
    if($usr_profile->existsProfilePic()==FALSE) 
    { 
     echo "<span class='spn_big_black_rbc'>You have not uploaded an image yet</span>";  
     echo "</br>";   
    } 

    if($usr_profile->checkForMissingInfo()== 1) 
    { 
     echo "<span class='spn_big_black_rbc'>You have some missing info</span>"; 
     echo "&nbsp;&nbsp;&nbsp;&nbsp;"; 
     echo link_to('Edit','profile/edit','class=link_medium'); 
    } 
    ?> 

    </td> 
</tr> 
<tr> 
<td align='left'> 
    <span class='spn_med_lightblue_rbc'>TO RAINBOW</span> 
    <span class='spn_med_black_rbc'>CODE</span> 
    <span class='spn_med_lightblue_rbc'>...SHINE ON</span> 
    </td> 
    <td> 
    </td> 
</tr> 
</table> 
<br/> 
<table class='table_border_light' width='820px'> 
<tr> 
    <td class='td_header_blue' colspan='3' align='left'> 
     <span class='spn_big_black_rbc'> 
     MY FEEDS 
     </span> 
    </td> 
    <td class='td_header_blue' colspan='3' align='left'> 
     <span class='spn_big_black_rbc'> 
      RAINBOWCODE NEWS 
     </span> 
    </td> 
</tr> 
<tr> 
    <td valign='top' colspan='3' width='50%' align='left'>    
    <span class='spn_med_black_rbc'>You have <?php echo $new_mail_cnt ?> new </span> 
    <?php echo link_to('Messages','messagebox/list','class=link_medium_blue'); ?>  
     </br> 
     <span class='spn_med_black_rbc'>You have 
      <?php 
       echo sizeof($block_records); 
      ?> blocked users </span> 
    </td> 
    <td valign='top'colspan='3' width='50%' align='left'> 
      <ul>     
      <li> 
       <a href="http://spreadsheets.google.com/a/miranetworks.net/spreadsheet/viewform?formkey=dEVlYTdJTzZiU0JPTnZqYWlZQTJRZ0E6MQ" class='link_medium_blue'> Rate us! Complete the online questionnaire</a></b> 
      </li> 
      <?php 
       foreach($news as $news_item) 
       { 
        echo "<li>".$news_item->getNews(). "</li>"; 
        $newsId = $news_item->getId(); 
        if ($newsId == 1) 
        { 
         //some echos here to display text 
        } 
       } 
      ?> 
      </ul> 
    </td> 
</tr> 
<tr> 
    <td colspan='3' align='left'> 
     <span class='spn_big_black_rbc'> 
     MOOD BAROMETER 
     <?php echo link_to('how does it work?','util/barometer','class=link_medium_blue'); ?> 
     </span> 
     <?php 
      include_component('profile','moodmetershow'); 
     ?> 
    </td> 
    <td colspan='3' align='left'> 
     <?php 
      include_component('profile','moodmeter'); 
     ?> 
    </td> 
</tr> 
<tr> 
    <td colspan='3' align='left'> 
    &nbsp; 
    </td> 
</tr> 
</table> 
</div> 
</div> 

我加入这个为$ new_mail_cnt:然后

echo $new_mail_cnt = '<script type="text/javascript">getMessages();</script>'; 

我有:

<script language="JavaScript" type="text/javascript"> 
    var receiveReq = getXmlHttpRequestObject(); 
    var mTimer; 

    function getXmlHttpRequestObject() 
    { 
     if (window.XMLHttpRequest) 
     { 
      return new XMLHttpRequest(); 
     } 
     else if(window.ActiveXObject) 
     { 
      return new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
     else 
     { 
      document.getElementById('p_status').innerHTML = 
      'Status: Cound not create XmlHttpRequest Object.' + 
      'Consider upgrading your browser.'; 
     } 
    } 

    function getMessages() 
    { 
     receiveReq = getXmlHttpRequestObject(); 
     if (receiveReq.readyState == 4 || receiveReq.readyState == 0) 
     {      
      receiveReq.open("POST", 'getMessage.php', true); 
      receiveReq.onreadystatechange = handleReceiveMessage(); 
      receiveReq.send(null); 
      document.getElementById('new_messages').innerHTML = receiveReq.responseXML; //not sure here 
     } 
     mTimer = setTimeout('getMessage();',2000); 
    } 

    function handleReceiveMessage() 
    { 
     if (receiveReq.readyState == 4) 
     { 
      var chat_div = document.getElementById('div_chat'); 
      var xmldoc = receiveReq.responseXML; 
      var message_nodes = xmldoc.getElementsByTagName("message"); 
     } 
    }  
</script> 

AJAX是一种允许您在页面加载后启动对服务器的Web请求的技术。当使用AJAX请求时,页面不必重新加载(实际上,用户甚至不会注意到请求正在发生)。

您应该启动一个AJAX请求到您的服务器,它将检查任何新消息。

要不断地检查新邮件,你可以使用任何的window.setTimeoutwindow.setInterval方法,推出在指定时段AJAX请求创建一个定时器。

虽然我不是推广使用库的忠实粉丝,但当问题没有提及它们的使用时,您可能会发现使用一个(例如jQuery)将大大简化管理AJAX请求的过程,因为它附带complete module这对你来说很辛苦。

无论您选择使用库来执行你的AJAX请求与否,工作流程的解决方案如下:

  1. 一个计时器(每10秒说,推出一个AJAX请求)到您服务器上的网页(例如checkfornewmessages.php)。
  2. 在您的服务器上,检查是否有新消息,并在输出中包含要显示给用户的内容(例如,新消息的数量,消息的标题等等)。
  3. 对于您的AJAX请求,在您的回调中,将AJAX调用(其中包含您在PHP代码中创建的输出)的响应设置为页面上某个DOM元素的内容(例如<span class='spn_med_black_rbc'>You have <?php echo $new_mail_cnt ?> new </span>) 。
+0

谢谢请看到一些代码,我添加...所有这些代码只是为了更新/刷新$ new_mail_cnt?哎呀! –

在JavaScript尝试计时器http://www.w3schools.com/js/js_timing.asp

我在你use_javascripts_for_form($ search_form)假设你有一个jQuery的引用,如果没有什么地方可以下载它,它包含在头

======注意UNTESTED === ===

更改以下行

 <span class='spn_med_black_rbc'>You have <?php echo $new_mail_cnt ?> new </span> 

 <span class='spn_med_black_rbc'>You have <div id='newMessageDiv'><?php echo $new_mail_cnt ?></div> new </span> 

添加类似下面的进入HEAD标签

 $(document).ready(function() { 
     $("#newMessageDiv").load 
    ("newMessageCheck.php"); 
     var refreshId = setInterval(function() { 
      $("#newMessageDiv").load('newMessageCheck.php?randval='+ Math.random()); 
     }, 10000); 
     $.ajaxSetup({ cache: false }); 
    }); 

这将尝试刷新股利每10秒newMessageCheck.php的内容,这个文件应该只是量只输出一个值当前的新消息。

+0

谢谢你,我会尝试这个 –

+0

在newMessageCheck.php对不起一定会发生什么,但我做了一个教程,并与得如此不明白了一切尚未...谢谢 –

+0

的newMessageCheck.php应该只是输出的单数($挣扎new_mail_cnt)相同的方式,得到了在当前文件 – ChrisK

你就把:

setTimeout(samefunction,milliseconds) 

的功能要自动充值和调用相同

此创建一个无限循环,等待X毫秒