精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

PHP+XML+jQuery實(shí)現(xiàn)即時(shí)功能

開發(fā) 前端
Google的即時(shí)功能是一種新的搜索增強(qiáng)功能,隨著您的鍵入顯示結(jié)果,它已經(jīng)獲得了眾多矚目,而且很容易明白這是為什么,這類即時(shí)功能的主要好處在于易于實(shí)現(xiàn),尤其當(dāng)您在使用jQuery等客戶端工具時(shí)。在本文中,您要遵循構(gòu)建簡(jiǎn)單搜索引擎的流程,而后再為該引擎構(gòu)建即時(shí)搜索用戶界面。這一切都始于獲取搜索數(shù)據(jù)。

Google的即時(shí)功能是一種新的搜索增強(qiáng)功能,隨著您的鍵入顯示結(jié)果,它已經(jīng)獲得了眾多矚目,而且很容易明白這是為什么。獲取結(jié)果所需做的全部工作就是鍵入。您無(wú)需按Enter鍵來(lái)查看結(jié)果,然后調(diào)整您的搜索并再次按Enter鍵。這都將隨著您的鍵入而發(fā)生。如果您還沒有這樣做,請(qǐng)嘗試一下。令人驚訝的是這么小的變化卻能在可用性上產(chǎn)生如此大的差異。

這類即時(shí)功能的主要好處在于易于實(shí)現(xiàn),尤其當(dāng)您在使用jQuery等客戶端工具時(shí)。在本文中,您要遵循構(gòu)建簡(jiǎn)單搜索引擎的流程,而后再為該引擎構(gòu)建即時(shí)搜索用戶界面。這一切都始于獲取搜索數(shù)據(jù)。

設(shè)置數(shù)據(jù)

對(duì)于本文,我決定搜索“辛普森一家”劇集。我創(chuàng)建一個(gè)包含所有 “辛普森一家” 劇集、標(biāo)題、季數(shù)、集數(shù)、播放日期和每集摘要的 XML 文件(包括在源代碼 下載 中)。您可以在清單 1中看到該XML的一部分。

 

  1. 清單1. XML數(shù)據(jù)源  
  2. <?xml version="1.0" encoding="UTF-8"?> 
  3. <episodes> 
  4.   <episode title='Simpsons Roasting on an Open Fire' episode='1' season='1'   
  5.   aired='17 December 1989'> 
  6.      Christmas seems doomed for the Simpson family when Homer receives no  
  7.     Christmas Bonus. Homer becomes a mall Santa Claus, hoping to make money and  
  8.     bring Marge, Bart, Lisa, and baby Maggie, a happy holiday.  
  9.   </episode> 
  10.    ...  
  11. </episodes> 

 

它實(shí)際上是一個(gè)非常大的文件,其大小約為840K。這應(yīng)該不令人意外,因?yàn)?“辛普森一家” 已經(jīng)播放了漫長(zhǎng)的22年。接下來(lái)就是編寫一個(gè)PHP類,可為您執(zhí)行XML解析和搜索。這個(gè)類稱為Simpsons,如清單 2中所示。

 

  1. 清單 2. Simpsons 搜索類  
  2. <?php 
  3. class Simpsons {  
  4.  private $episodes = array();  
  5.  public function __construct() {  
  6.    $xmlDoc = new DOMDocument();  
  7.    $xmlDoc->load("simpsons.xml");  
  8.  foreach ($xmlDoc->documentElement->childNodes as $episode)  
  9.    {  
  10.      if ( $episode->nodeType == 1 ) {  
  11.       $this->episodes []= array(   
  12.       'episode' => $episode->getAttribute( 'episode' ),  
  13.       'season' => $episode->getAttribute( 'season' ),  
  14.       'title' => $episode->getAttribute( 'title' ),  
  15.       'aired' => $episode->getAttribute( 'aired' ),  
  16.       'summary' => $episode->nodeValue );  
  17.      }  
  18.    }  
  19.  }  
  20.  public function find( $q ) {  
  21.    $found = array();  
  22.    $re = "/".$q."/i";  
  23.    foreach( $this->episodes as $episode ) {  
  24.      if ( preg_match( $re, $episode['summary'] ) ||   
  25.         preg_match( $re, $episode['title'] ) ) {  
  26.      $found []= $episode;  
  27.    }  
  28.    }  
  29.    return $found;  
  30.  }  
  31. }  
  32. ?> 

 

該類的構(gòu)造函數(shù)使用對(duì)于PHP來(lái)說(shuō)標(biāo)準(zhǔn)的XML DOM庫(kù)讀取劇集信息的XML文件。它迭代根節(jié)點(diǎn)的所有子節(jié)點(diǎn)并提取它們的季數(shù)、標(biāo)題、播放日期和劇集屬性,以及包含摘要的節(jié)點(diǎn)的文本。然后將所有數(shù)據(jù)作為一個(gè)哈希表附加到劇集數(shù)組,該數(shù)組是一個(gè)成員變量。

然后,find函數(shù)搜索劇集列表以便使用與標(biāo)題和摘要匹配的簡(jiǎn)單正則表達(dá)式來(lái)查找匹配項(xiàng)。任何匹配的劇集都被附加到一個(gè)數(shù)組,然后返回給調(diào)用方。如果數(shù)組為空,則沒有發(fā)現(xiàn)匹配項(xiàng)。

現(xiàn)在有了數(shù)據(jù),下一步就是開始構(gòu)建Ajax響應(yīng)程序,您的即時(shí)UI將調(diào)用該響應(yīng)程序來(lái)檢索數(shù)據(jù)。

#p#

創(chuàng)建Ajax響應(yīng)頁(yè)面

第一個(gè)版本的UI針對(duì)Ajax請(qǐng)求使用HTML響應(yīng)。此方法是實(shí)現(xiàn)即時(shí)UI的最簡(jiǎn)單的方式。即時(shí)UI web頁(yè)面采用搜索關(guān)鍵詞并使用該關(guān)鍵詞對(duì)服務(wù)器發(fā)出Ajax 請(qǐng)求。然后,服務(wù)器格式化組成該響應(yīng)的HTML塊并將其返回到頁(yè)面。在一個(gè)簡(jiǎn)單的調(diào)用中,即時(shí)UI web頁(yè)面中的代碼將使用更新的 HTML 替換該頁(yè)面的一部分。

在本文的后面,我會(huì)演示使用來(lái)自服務(wù)器的XML響應(yīng)和JSON響應(yīng),但是現(xiàn)在,為了簡(jiǎn)單起見,我們從HTML版開始。

您首先需要的是HTML響應(yīng)頁(yè)面。此頁(yè)面接受來(lái)自請(qǐng)求的查詢字符串。然后使用該字符串調(diào)用Simpsons類來(lái)搜索劇集。接著,將已返回的劇集數(shù)組格式化 HTML。此代碼位于清單 3中。

 

  1. 清單 3. HTML Ajax 響應(yīng)頁(yè)面  
  2. <?php 
  3. include 'Simpsons.php';  
  4.  
  5. $s = new Simpsons();  
  6. $episodes = $s->find( $_REQUEST['q'] );  
  7. if ( count( $episodes ) == 0 ) {  
  8. ?> 
  9. No results found  
  10. <?php   
  11. } else {  
  12. ?> 
  13. <table> 
  14. <?php foreach( $episodes as $e ) { ?> 
  15. <tr><td class="episode"><b><?php echo( $e['title'] )   
  16. ?></b> -   
  17.  Season <?php echo( $e['season'] ) ?>   
  18.  Episode <?php echo( $e['episode'] ) ?> -   
  19.  Aired on <?php echo( $e['aired'] ) ?></td></tr> 
  20. <tr><td class="summary"><?php echo( $e['summary'] )   
  21. ?></td></tr> 
  22. <?php } ?> 
  23. </table> 
  24. <?php 
  25. }  
  26. ?> 

 

在頂部,清單 3包括Simpsons類。然后該代碼創(chuàng)建該類的一個(gè)新實(shí)例并進(jìn)行find調(diào)用。之后它會(huì)查看響應(yīng)是否為空,以及是否返回 “No Results Found”;否則,它遍歷這些結(jié)果并組成一個(gè)結(jié)果表。

為了測(cè)試該頁(yè)面,只需轉(zhuǎn)到您的Web瀏覽器并請(qǐng)求該網(wǎng)頁(yè)。您可以在圖 1中看到輸出。

此時(shí),您擁有開始構(gòu)建即時(shí)搜索UI所需要的所有東西。

#p#

構(gòu)建即時(shí)搜索UI

使用JavaScript jQuery庫(kù)可以輕松構(gòu)建即時(shí)搜索UI。查看清單 4,您就可以明白我的意思。

 

  1. 清單 4. 使用HTML響應(yīng)的即時(shí)頁(yè)面  
  2. <html><head> 
  3. <script src="jquery-1.4.2.min.js"></script> 
  4. <link rel="stylesheet" href="styles.css" type="text/css" /> 
  5. <title>Instant Search - HTML Based</title> 
  6. </head> 
  7. <body> 
  8. Simpsons Search: <input type="text" id="term" /> 
  9. <div id="results"> 
  10. </div> 
  11. <script> 
  12. $(document).ready(function() {  
  13. $('#term').keyup(function() {  
  14.   $.get('search_html.php?q='+escape($('#term').val()), function(data) {  
  15.     $('#results').html(data);  
  16.   } );  
  17. } );  
  18. } );  
  19. </script> 
  20. </body> 
  21. </html> 

 

在頁(yè)面的頂部,清單 4包括jQuery庫(kù)和CSS樣式表,以使輸出更美觀。頁(yè)面的主體包括搜索關(guān)鍵詞的輸入字段和保存此輸出的結(jié)果div。

工作的大部分都在頁(yè)面底部的 JavaScript 部分完成。它首先調(diào)用文檔中的 ready 函數(shù)。此調(diào)用可確保在頁(yè)面準(zhǔn)備就緒前都不執(zhí)行內(nèi)部 JavaScript。內(nèi)部 JavaScript 使用搜索關(guān)鍵詞輸出對(duì)象中的 keyup 函數(shù)來(lái)監(jiān)控搜索關(guān)鍵詞字段中的關(guān)鍵字鍵入。在文本字段變更時(shí),將對(duì)服務(wù)器調(diào)用 Ajax get 方法。通過(guò)使用 html 函數(shù),來(lái)自此調(diào)用的數(shù)據(jù)響應(yīng)將用于填充結(jié)果元素。

如果JavaScript代碼看上去像線路噪聲,沒關(guān)系。這實(shí)際上就是JavaScript的技術(shù)現(xiàn)狀,該代碼需要復(fù)查線路,所以代碼規(guī)模最好保持得小一些。

雖然您可以在沒有jQuery庫(kù)的情況下完成這些工作,但是使用該庫(kù)的價(jià)值在于,該代碼非常簡(jiǎn)潔且所有跨平臺(tái)工作都已經(jīng)為您完成。您不必?fù)?dān)心Internet Explorer與Safari或Firefox;只需編寫一次代碼然后將其用于任何地方。

要測(cè)試該庫(kù),請(qǐng)?jiān)赪eb瀏覽器中建立即時(shí)搜索UI。在圖 2中,您可以看到類似的東西。

圖2顯示了我輸入少量字符后的界面。在我鍵入關(guān)鍵詞 “frink” 之后,您可以在 圖 3 中看到結(jié)果。

圖3顯示了在標(biāo)題或兩集概要中出現(xiàn) “frink”。可笑的數(shù)據(jù)!Frink教授(到目前為止節(jié)目中的最佳角色)出現(xiàn)在不止兩集中。但這仍是非常奇妙。本地計(jì)算機(jī)上的響應(yīng)時(shí)間是非常出色的,即使服務(wù)器代碼解析是通過(guò)840K的XML。

現(xiàn)在您可能想通過(guò)在每一個(gè)按鍵之間放置一個(gè)延遲并在您真正發(fā)出請(qǐng)求時(shí)來(lái)控制請(qǐng)求的數(shù)量。在清單 5中,更新的代碼可以執(zhí)行此操作。

 

  1. 清單 5. 使用帶有延遲的 HTML 響應(yīng)的即時(shí)頁(yè)面  
  2. <html><head> 
  3. <link rel="stylesheet" href="styles.css" type="text/css"> 
  4. <script src="jquery-1.4.2.min.js"></script> 
  5. <title>Instant Search - HTML Based With Delay</title> 
  6. </head> 
  7. <body> 
  8. Simpsons Search: <input type="text" id="term" /> 
  9. <div id="results"> 
  10. </div> 
  11. <script> 
  12. delayTimer = null;  
  13.  
  14. function getResults() {  
  15.   $.get('search_html.php?q='+escape($('#term').val()), function(data) {  
  16.     $('#results').html(data);  
  17.   } );  
  18.   delayTimer = null;  
  19. }  
  20.  
  21. $(document).ready(function() {  
  22. $('#term').keyup(function() {  
  23.   if ( delayTimer )  
  24.      window.clearTimeout( delayTimer );  
  25.   delayTimer = window.setTimeout( getResults, 200 );  
  26. } );  
  27. } );  
  28. </script> 
  29. </body> 
  30. </html> 

 

此代碼在用戶按鍵時(shí)創(chuàng)建一個(gè)計(jì)時(shí)器。當(dāng)該計(jì)時(shí)器在 200 毫秒后停止時(shí),請(qǐng)求發(fā)出。如果另外一次擊鍵在計(jì)時(shí)器停止之前,則原來(lái)的計(jì)時(shí)器將被取消,同時(shí)創(chuàng)建一個(gè)新的計(jì)時(shí)器。其結(jié)果就是在用戶停止了鍵入之后,計(jì)時(shí)器停止 200 毫秒。雖然該界面始終感覺像原來(lái)的,但是向服務(wù)器發(fā)出請(qǐng)求的數(shù)量會(huì)大幅減少,尤其是在用戶快速鍵入的時(shí)候。

雖然我們可以到此為止,但是實(shí)際上有另外兩種方式來(lái)進(jìn)行此即時(shí)過(guò)程。

#p#

遷移到XML

第一種方式是使用XML作為您從服務(wù)器到客戶端的傳輸語(yǔ)法。此處的想法是服務(wù)器提供一個(gè)通用XML端點(diǎn),任何流程都可以使用該端點(diǎn)來(lái)執(zhí)行查詢,并且您的客戶端足夠智能,能夠讀取XML并以其想要的方式來(lái)格式化它。

要變成XML,首先要?jiǎng)?chuàng)建如清單 6中所示的新服務(wù)器頁(yè)面。

 

  1. 清單6. XML Ajax頁(yè)面  
  2. <?php 
  3. include 'Simpsons.php';  
  4.  
  5. header( 'Content-type: text/xml' );  
  6.  
  7. $s = new Simpsons();  
  8. $doc = new DOMDocument();  
  9. $root = $doc->createElement( 'episodes' );  
  10. $doc->appendChild( $root );  
  11. foreach( $s->find( $_REQUEST['q'] ) as $episode ) {  
  12.    $el = $doc->createElement( 'episode' );  
  13.    $el->setAttribute( 'title', $episode['title'] );  
  14.    $el->setAttribute( 'episode', $episode['episode'] );  
  15.    $el->setAttribute( 'season', $episode['season'] );  
  16.    $el->setAttribute( 'aired', $episode['aired'] );  
  17.  
  18.    $tn = $doc->createTextNode( $episode['summary'] );  
  19.    $el->appendChild( $tn );  
  20.  
  21.    $root->appendChild( $el );  
  22. }  
  23. print $doc->saveXML();  
  24. ?> 

 

雖然搜索仍然一樣,但是您格式化結(jié)果的方式變了。現(xiàn)在,該代碼創(chuàng)建了XML文檔并將節(jié)點(diǎn)附加到其上,從而保存所有返回的數(shù)據(jù)。然后在腳本的末尾,它只是將XML DOM保存為字符串。請(qǐng)注意在腳本的頂部,在導(dǎo)出XML而非HTML時(shí),還要將內(nèi)容類型設(shè)置為文本/xml。

如果在您的Web瀏覽器中導(dǎo)航到此頁(yè)面,則您會(huì)看到類似圖 4中的情況。

不過(guò),一些瀏覽器可能以更結(jié)構(gòu)化的方式顯示已返回的文本。如果您想查看原始的源XML,則您可以選擇View - Source以便看到類似圖 5中的窗口。

如您所見,該腳本創(chuàng)建了一些良好格式化的XML,準(zhǔn)備好供新的客戶端代碼使用。

解析XML(而不是直接使用 HTML)的新客戶端代碼位于清單 7中。

 

  1. 清單 7. 使用 XML 的即時(shí)搜索頁(yè)面  
  2. <html><head> 
  3. <script src="jquery-1.4.2.min.js"></script> 
  4. <link rel="stylesheet" href="styles.css" type="text/css" /> 
  5. <title>Instant Search - XML Based</title> 
  6. </head> 
  7. <body> 
  8. Simpsons Search: <input type="text" id="term" /> 
  9. <table id="results"> 
  10. </table> 
  11. <script> 
  12. $(document).ready( function() {  
  13. $('#term').keyup( function() {  
  14.  $.get('search_xml.php?q='+escape($('#term').val()), function(data) {  
  15. html = '<table id="results">';  
  16. $(data).find('episode').each( function() {  
  17.      var ep = $(this);  
  18.          html += '<tr><td class="episode"><b>'+  
  19.          ep.attr('title')+'</b>&nbsp;';  
  20.          html += 'Season '+ep.attr('season')+'&nbsp;';  
  21.          html += 'Episode '+ep.attr('episode')+'&nbsp;';  
  22.          html += 'Aired '+ep.attr('aired')+'</td></tr>';  
  23.          html += '<tr><td class="summary">'+  
  24.          ep.text()+'</td></tr>';  
  25.    } );  
  26.    html += '</html>';  
  27.    $('#results').replaceWith( html );  
  28.  } );  
  29. } );  
  30. } );  
  31. </script> 
  32. </body> 
  33. </html> 

 

用于監(jiān)控?fù)翩I和發(fā)出Ajax請(qǐng)求的客戶端代碼幾乎完全一樣。所不同的是不同的URL獲取XML數(shù)據(jù)而不是HTML數(shù)據(jù)。

在數(shù)據(jù)返回以后,該代碼使用jQuery來(lái)尋找所有劇集標(biāo)簽。然后它可格式化大量XML并使用replaceWith函數(shù)來(lái)用新表替換舊表。由于使用了jQuery,此代碼比在使用瀏覽器的原生 DOM 功能時(shí)更容易使用。

傳輸數(shù)據(jù)的另一種方式是通過(guò)JSON(JavaScript對(duì)象符號(hào))。

#p#

遷移到JSON

在Web 2.0的世界中,JSON是一種非常流行的移動(dòng)數(shù)據(jù)的方式。它小巧、方便、快捷,便于瀏覽器讀取,因?yàn)樾枰龅乃胁僮骶褪窃u(píng)估已返回的JavaScript代碼。創(chuàng)建JSON也很簡(jiǎn)單,就如您在清單 8中的Ajax搜索頁(yè)面的JSON版本中所見的那樣。

 

  1. 清單8. JSON Ajax頁(yè)面  
  2. <?php 
  3. include 'Simpsons.php';  
  4.  
  5. header( 'Content-type: application/json' );  
  6.  
  7. $s = new Simpsons();  
  8. print json_encode( $s->find( $_REQUEST['q'] ) );  
  9. ?> 

 

您只需使用json_encode函數(shù)來(lái)將已返回的數(shù)組轉(zhuǎn)變?yōu)镴SON代碼。如果您好奇的話,這里也存在一個(gè)可將JSON轉(zhuǎn)回為PHP基本類型的json_decode函數(shù)。大多數(shù)流行語(yǔ)言都具有與這里一樣簡(jiǎn)單的JSON機(jī)制,可以將基本數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)化為JSON,或者轉(zhuǎn)換出JSON。

如果您在瀏覽器中查看JSON頁(yè)面,則您會(huì)看到類似圖 6中的響應(yīng)頁(yè)面。

雖然本頁(yè)面可能不會(huì)太吸引人們的目光,但是對(duì)于瀏覽器中的JavaScript解譯器來(lái)說(shuō),此頁(yè)面看起來(lái)非常易于閱讀。用于讀取 JSON 格式化輸出的相應(yīng)的即時(shí)UI web代碼位于清單 9中。

 

  1. 清單 9. JSON 即時(shí)搜索 UI  
  2. <html><head> 
  3. <script src="jquery-1.4.2.min.js"></script> 
  4. <link rel="stylesheet" href="styles.css" type="text/css" /> 
  5. <title>Instant Search - JSON Based</title> 
  6. </head> 
  7. <body> 
  8. Simpsons Search: <input type="text" id="term" /> 
  9. <table id="results"> 
  10. </table> 
  11. <script> 
  12. $(document).ready( function() {  
  13. $('#term').keyup( function() {  
  14.  $.get('search_json.php?q='+escape($('#term').val()), function(data) {  
  15.    html = '<table id="results">';  
  16.    $.each( data, function( ind, ep ) {  
  17.          html += '<tr><td class="episode"><b>'+ep.title+'</b>&nbsp;';s  
  18.          html += 'Season '+ep.season+'&nbsp;';  
  19.          html += 'Episode '+ep.episode+'&nbsp;';  
  20.          html += 'Aired '+ep.aired+'</td></tr>';  
  21.          html += '<tr><td class="summary">'+ep.summary+'</td></tr>';  
  22.    } );  
  23.    html += '</html>';  
  24.    $('#results').replaceWith( html );  
  25.  } );  
  26. } );  
  27. } );  
  28. </script> 
  29. </body> 
  30. </html> 

 

此代碼非常類似于 XML 代碼,不同的是您可以對(duì)返回的數(shù)組使用 jQuery each 函數(shù),然后使用點(diǎn)符號(hào)來(lái)訪問(wèn)數(shù)據(jù)中的所有重要關(guān)鍵字(也就是說(shuō),標(biāo)題、劇集、摘要等等)。

現(xiàn)在您具有:可以用作您自己的工作起始點(diǎn)的即時(shí)搜索功能的初步實(shí)現(xiàn)。

與Google的開發(fā)人員所做的相比,此實(shí)現(xiàn)具有三個(gè)主要區(qū)別。首先是縮放。他們每天要處理數(shù)十億的搜索,現(xiàn)在通過(guò)每一次擊鍵他們可處理數(shù)十億單獨(dú)的小搜索。雖然存在許多有關(guān)這方面的問(wèn)題和解決方案,但是在這種情況下您至少有一件事情要去做 — 瀏覽器緩存。如果用戶鍵入相同的關(guān)鍵詞兩次,由于瀏覽器緩存的緣故,實(shí)際上僅進(jìn)行一個(gè)請(qǐng)求,因?yàn)榈诙伟l(fā)出請(qǐng)求時(shí)瀏覽器返回緩存的數(shù)據(jù)。

Google 所作的另外一件事情是預(yù)取結(jié)果。例如,如果您鍵入 “mov”,則暗示您正在尋找 “movies”,進(jìn)行此搜索并通過(guò)用于您缺少的 “ies” 的灰色文本指示這點(diǎn)。

第三個(gè)區(qū)別是對(duì)于分頁(yè)的支持,這相當(dāng)容易解決。您所要做的就是在頁(yè)面的底部為頁(yè)面鏈接添加一些 JavaScript,然后在用戶單擊以從第一頁(yè)瀏覽到任何隨后頁(yè)面時(shí)調(diào)用此腳本。

結(jié)束語(yǔ)

Google的即時(shí)UI功能真的很即時(shí)。它是革命性的嗎?不是。但是它是對(duì)可用性具有深遠(yuǎn)影響的一小步。正如您從本文中看到的,通過(guò)使用像XML、PHP和jQuery這樣的標(biāo)準(zhǔn)工具,這些行為的初步階段并不難實(shí)現(xiàn)。

【編輯推薦】

  1. PHP+MySQL+jQuery實(shí)現(xiàn)發(fā)布微博程序——PHP篇
  2. PHP+MySQL+jQuery實(shí)現(xiàn)發(fā)布微博程序——jQuery篇
  3. Web顯老了?傳統(tǒng)Web開發(fā)模式或已走到盡頭 
責(zé)任編輯:王曉東 來(lái)源: IBM DW
相關(guān)推薦

2012-02-08 17:01:36

2012-06-05 09:38:39

PHP

2011-07-25 15:54:08

XCode PHP

2010-10-27 10:02:36

PHP

2010-10-25 10:07:48

jQuery

2012-06-12 16:45:57

PHP

2018-06-04 10:53:25

2009-11-30 15:10:46

PHP substr函

2011-06-17 10:11:01

jQueryPHP

2011-03-23 10:55:55

PHPMySQLjQuery

2024-01-24 09:51:47

Vue3.NET通訊功能

2011-07-15 14:29:44

PHPXML

2017-09-12 14:15:32

Facebook

2009-06-16 11:49:00

JQuery實(shí)現(xiàn)loaWCF

2011-05-18 13:43:52

jQueryAjaxPHP

2009-11-30 17:49:51

PHP函數(shù)preg_s

2012-06-13 10:49:23

PHP

2009-12-02 15:45:04

PHP抓取天氣預(yù)報(bào)

2011-05-18 13:28:46

jQueryPHPAJAX

2011-02-22 14:10:25

PHPXML
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

亚洲成人动漫在线| 国产欧美日韩视频| 国产精品美女高潮无套| 亚洲精品tv| 亚洲一区二区三区四区在线 | 岛国精品一区| 色综合天天综合在线视频| 亚洲成色最大综合在线| 亚洲国产精彩视频| 日韩av网站免费在线| 欧美乱大交xxxxx| 爱爱的免费视频| 国产免费av国片精品草莓男男| 福利微拍一区二区| 波多野结衣激情| 神马电影在线观看| 国产在线精品国自产拍免费| 欧亚精品在线观看| 日韩视频中文字幕在线观看| 国产精品一区2区3区| 欧美成人一区二区三区片免费| 日本成人黄色网| heyzo在线| 亚洲人成在线观看一区二区| 欧美亚洲免费在线| 国产成人手机在线| 久久精品二区亚洲w码| **欧美日韩vr在线| 福利所第一导航| 欧美成人milf| 亚洲丝袜在线视频| av网页在线观看| 欧美日韩国产一区二区在线观看| 91成人免费在线视频| 国产九九九九九| caoporn免费在线视频| 亚洲国产成人在线| 欧美区高清在线| 天天射天天色天天干| 国产麻豆9l精品三级站| 国产精品情侣自拍| 欧美 亚洲 另类 激情 另类| 国产亚洲一区在线| 97精品国产97久久久久久免费 | 亚洲三级在线视频| 欧洲亚洲精品久久久久| 欧美中文一区二区三区| 虎白女粉嫩尤物福利视频| 91超碰在线播放| 亚洲中国最大av网站| 国产一级片91| 亚洲电影视频在线| 樱花草国产18久久久久| 加勒比海盗1在线观看免费国语版| 黄色网址在线免费| 综合久久一区二区三区| 咪咪色在线视频| 久久精品视频观看| 日韩一区在线看| 色中文字幕在线观看| 1769在线观看| 最新高清无码专区| 男人日女人的bb| 免费污视频在线观看| 亚洲一区av在线| 成人在线观看你懂的| 黄色aa久久| 欧美日韩精品中文字幕| www.四虎成人| 国产毛片精品久久| 欧美高清视频www夜色资源网| 波多野结衣xxxx| 欧美成人一二区| 欧美一级爆毛片| 亚洲精品中文字幕在线播放| 日本午夜精品久久久| 亚洲男女自偷自拍图片另类| 日韩不卡av在线| 91不卡在线观看| 欧美极品第一页| 亚洲影院在线播放| 久久国产精品99久久人人澡| 成人黄色在线观看| 狠狠综合久久av一区二区| 99精品久久免费看蜜臀剧情介绍| 欧美日韩在线一区二区三区| av小片在线| 亚洲老妇xxxxxx| 一区二区传媒有限公司| 久久久人成影片一区二区三区在哪下载| 欧美午夜不卡视频| 少妇欧美激情一区二区三区| 少妇精品导航| 久久这里只有精品视频首页| 日韩女同强女同hd| 男人的j进女人的j一区| 国产精品初高中精品久久| 青青草在线免费视频| 亚洲三级在线看| 一女被多男玩喷潮视频| 欧美日韩伦理一区二区| 精品国产成人系列| 永久免费av无码网站性色av| 欧美精品日本| 国产精品一区二区久久久久| 国产成人三级在线观看视频| 国产精品久久久久久久蜜臀| 欧美一级欧美一级| 成人亚洲网站| 日韩成人在线网站| 国产成人自拍网站| 天堂一区二区在线| 懂色一区二区三区av片| 国产在线观看高清视频| 亚洲成av人片一区二区三区| 岛国av在线免费| 亚洲第一论坛sis| 久久香蕉国产线看观看网| 亚洲s码欧洲m码国产av| 成人黄色一级视频| 国产一区一区三区| 国产激情久久| 日韩精品极品在线观看| 青青草激情视频| 免费高清成人在线| 久久综合一区| brazzers在线观看| 日韩欧美一区中文| 黑人狂躁日本娇小| 天堂av在线一区| 久久伦理网站| 成人黄色动漫| 精品日韩一区二区| 欧美色图亚洲视频| 免费欧美在线视频| 日韩免费av电影| a一区二区三区| 亚洲福利视频在线| 国产精品999久久久| 国产精品系列在线观看| 性做爰过程免费播放| 成人国产激情在线| 中文字幕日韩欧美在线| 中文字幕免费高清网站| 91免费看片在线观看| 国产一区二区在线视频播放| 黑人久久a级毛片免费观看| 美女av一区二区| 国产毛片毛片毛片毛片| 综合激情成人伊人| 午夜一区二区视频| 午夜精品毛片| 91亚洲午夜在线| 91精品久久| 精品捆绑美女sm三区| 欧美毛片在线观看| 懂色av一区二区夜夜嗨| www.日本三级| 风间由美性色一区二区三区四区| 久久久久久久久久久91| 日韩中文字幕免费观看| 五月天久久比比资源色| 午夜理伦三级做爰电影| 日韩电影在线一区二区| 亚洲视频在线观看日本a| 久久亚洲精品中文字幕| 久久九九热免费视频| 精品国产乱码一区二区三| 亚洲一卡二卡三卡四卡五卡| 一区二区三区少妇| 久久人人超碰| 亚洲一区二区三区乱码| 亚洲不卡视频| 欧美亚州一区二区三区| 成年人在线视频免费观看| 欧美日韩国产一级| 久久久久成人片免费观看蜜芽| 风间由美一区二区三区在线观看| 国产午夜福利在线播放| 精品国产一区二区三区久久久蜜臀| 国产欧美一区二区三区久久人妖| av片在线观看永久免费| 日韩精品视频中文在线观看| 嫩草影院一区二区三区| 亚洲私人影院在线观看| 欧美大喷水吹潮合集在线观看| 久久精品女人| 亚洲AV无码成人精品一区| 国产精东传媒成人av电影| 日本人成精品视频在线| 成人在线播放免费观看| 亚洲精品一区久久久久久| 国产精品国产精品国产专区| 亚洲大片免费看| 亚洲一级片在线播放| 国产99一区视频免费| 天天碰免费视频| 亚洲性感美女99在线| 日韩欧美亚洲精品| 成人免费直播在线| 国产女精品视频网站免费| 99色在线观看| 麻豆国产精品va在线观看不卡 | 在线日韩精品视频| 日韩一区二区三区不卡| 欧美日韩精品免费| av资源免费观看| 一区二区日韩电影| 欧美性受xxxx黑人| 久久伊人蜜桃av一区二区| 又黄又爽又色的视频| 日本在线观看不卡视频| 无罩大乳的熟妇正在播放| 亚洲情侣在线| 日韩精品一区二区三区丰满 | 欧美一区二区视频在线| eeuss鲁片一区二区三区| 国产欧亚日韩视频| 精品国产第一福利网站| 国内精品久久久久久久| а√资源新版在线天堂| 在线观看不卡av| 午夜在线观看视频18| 精品欧美黑人一区二区三区| 亚洲天堂久久久久| 色嗨嗨av一区二区三区| 日韩成人一区二区三区| 亚洲午夜在线电影| 少妇aaaaa| 中文字幕亚洲一区二区va在线| 精品无人区无码乱码毛片国产| 不卡视频一二三| 久久久久中文字幕亚洲精品| 国产乱人伦偷精品视频不卡| 日本高清久久久| 日本va欧美va精品| 日本va中文字幕| 老司机久久99久久精品播放免费| 国产高清精品在线观看| 亚洲免费影院| 黄色网页免费在线观看| 国产精品一级| 1024av视频| 性高湖久久久久久久久| 亚洲欧洲日产国码无码久久99 | xx欧美撒尿嘘撒尿xx| 日韩成人一级大片| 国产一级不卡毛片| 秋霞午夜鲁丝一区二区老狼| 一区二区三区 欧美| 美女精品一区二区| wwww.国产| 久久99久久久久久久久久久| 国产免费中文字幕| 国产高清在线观看免费不卡| 亚洲熟妇一区二区| 成人听书哪个软件好| 黄色污在线观看| 91在线国产观看| 亚洲最大成人综合网| 国产精品视频第一区| 91传媒免费观看| 一区二区三区在线观看视频| 日韩av在线播| 色狠狠一区二区| 国产永久免费视频| 日韩精品中文字幕一区| 手机在线观看免费av| 亚洲欧美在线播放| av影片免费在线观看| 九九热最新视频//这里只有精品| 深夜国产在线播放| 97碰碰碰免费色视频| www.成人爱| 成人黄色大片在线免费观看| 91久久精品无嫩草影院| 免费在线成人av| 99久久视频| 久久久久久久久久久99| 手机精品视频在线观看| 亚洲精品在线视频播放| av不卡免费电影| 波多野结衣一二三四区| 亚洲理论在线观看| 日韩特级黄色片| 欧美顶级少妇做爰| 在线观看xxx| 精品久久国产精品| av免费不卡| 国产在线视频欧美| 精品在线网站观看| 亚洲欧洲一二三| 伊人影院久久| 在线观看av网页| 成人午夜视频福利| av资源在线免费观看| 亚洲成国产人片在线观看| 最近中文字幕在线观看视频| 欧美v日韩v国产v| √新版天堂资源在线资源| 性视频1819p久久| 91成人app| 青青草原成人| 在线日韩电影| 中文字幕精品一区二区三区在线| 9人人澡人人爽人人精品| 天天操夜夜操av| 在线观看网站黄不卡| 日韩中文字幕免费观看| 大胆欧美人体视频| 亚洲成人av观看| 国产一区二区三区四区五区加勒比| 日韩伦理一区| 日本va中文字幕| aaa国产一区| 久久久久性色av无码一区二区| 欧美日韩视频在线第一区| 色综合久久网女同蕾丝边| 欧美成在线观看| 少妇精品视频在线观看| 日韩高清av| 噜噜噜91成人网| av鲁丝一区鲁丝二区鲁丝三区| 亚洲精品免费在线播放| 97超碰人人模人人人爽人人爱| 一本色道久久综合亚洲精品小说| 性欧美xxx69hd高清| 国产精品日韩高清| 亚洲最新色图| а 天堂 在线| 国产精品视频一二| 亚洲国产精品无码久久久| 亚洲精品久久久久久久久| 黄色美女视频在线观看| 亚洲最大的免费| 你懂的视频一区二区| 亚洲精品综合在线观看| 国产精品美女久久久久aⅴ| 日韩国产亚洲欧美| 国产亚洲日本欧美韩国| 日本成人片在线| 日本在线观看一区二区| 日韩精品亚洲一区二区三区免费| 亚洲熟妇一区二区三区| 欧美色另类天堂2015| 美丽的姑娘在线观看免费动漫| 88xx成人精品| 免费电影一区二区三区| 国产一级不卡毛片| 国产精品视频第一区| 亚洲最大成人av| 久久精品视频导航| 国产精品毛片aⅴ一区二区三区| 熟妇熟女乱妇乱女网站| 国产麻豆精品在线观看| www.av视频在线观看| 亚洲电影免费观看高清| 国产高潮在线| 欧洲一区二区在线观看| 日本一不卡视频| 99久久久免费精品| 日韩美一区二区三区| av影院在线免费观看| 麻豆视频成人| 日韩成人伦理电影在线观看| 欧美成人久久久免费播放| 91精品国产综合久久国产大片| 日皮视频在线观看| 狠狠色噜噜狠狠色综合久| 视频一区中文字幕| 中文字幕资源站| 日韩写真欧美这视频| 两个人看的在线视频www| 日本不卡免费新一二三区| 激情六月婷婷综合| 国产系列精品av| 亚洲一二在线观看| 精品一级视频| 69堂免费视频| 国产精品免费视频一区| 午夜精品久久久久久久96蜜桃| 2019中文字幕在线| 久久精品99久久无色码中文字幕| 亚洲综合123| 欧美日韩国产页| 快射av在线播放一区| 久久爱av电影| 狠狠色丁香九九婷婷综合五月| 国产在线欧美在线| 中文欧美在线视频| 超碰成人在线免费| 国产三级国产精品国产专区50| 亚洲一级二级三级在线免费观看| 久草在线免费福利资源| 99视频在线播放| 日本免费在线视频不卡一不卡二| 精品小视频在线观看| 中文字幕亚洲欧美一区二区三区| 51社区在线成人免费视频| 亚洲 中文字幕 日韩 无码|