2015年12月28日 星期一

JQuery中的Ajax的基礎運用。提供範例程式下載

在這個號稱 web 2.0 的時代,寫網站,尤其是還用到了大量的 JavaScript,如果與使用者的互動還沒有用到 Ajax 技術的話,似乎是一件很神奇的事,至於 Ajax 是什麼東西?想瞭解的人可以到這裡去看維基百科上的解釋,這篇就專心寫一下 jQuery 中的 Ajax 部份。
程式範例:下載點
這個 PHP 程式很簡單, recive.php它只回應一個index.php傳入的字串,所以我們現在要做的事情便是:按下按鈕後,向 server 端的 index.php向recive.php 發出一個 request,然後把它回應的東西放alert出來。所以我們把 Submit 函式的部份寫成這樣:index.php
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
        <script type="text/javascript" src="jquery.js" ></script>
        <script>
         var Submit=function(){
            var URLs="recive.php";
           
            $.ajax({
                url: URLs,
                data: $('#sentToBack').serialize(),
                type:"POST",
                dataType:'text',
                success: function(msg){
                    alert(msg);
                },
                 error:function(xhr, ajaxOptions, thrownError){ 
                    alert(xhr.status); 
                    alert(thrownError); 
                 
}
            });
            
        }
        </script>
    </head>
    <body>
        <form id="sentToBack">
            <input type="text" name="Text"/> 
            <input type="button"  value="送出" onClick="Submit()"/>
        </form>
    </body>
</html>

ajax當中的參數:
url:指定要進行呼叫的位址。
data:傳送至Server的資料,會自動轉為query string的型式,如果是GET請求還會幫你附加到URL。可用processData選項禁止此自動轉換。物件型式則為一Key/Value pairs。這個範例程式,是使用serialize(),會把name為sentToBack的表單中的資料傳送出去,型態的部分要看type的設定,一般表單都是用POST或是GET。
type:請求方式,POST/GET。
dataType:預期Server傳回的資料類型,如果沒指定,jQuery會根據HTTP MIME Type自動選擇以responseXML或responseText傳入你的success callback。可選的資料類型有:
                  xml:傳回可用jQuery處理的XML
                  html:傳回HTML,包含jQuery會自動幫你處理的script tags。
                  script:傳回可執行的JavaScript。(script不會被自動cache,除非cache設為true)
                  json:傳回JSON
                  jsonp:在URL加上?callback=?參數,並在Server端配合送回此jsonp callback。
                  text:傳回純文字字串。
success:請求成功時執行函式。
                
function (data, textStatus) {
                       // data 可以是 xmlDoc, jsonObj, html, text, 但還是要參考datatype 
                         
                } 
error:請求失敗時執行函式。           function (xhr, ajaxOptions, thrownError) {
                   //通常ajaxOptions或thrownError只有一個有值
           } 
           這個很重要,因為有時候Sever寫好的程式不容易測試,可以透過這個函數把錯誤顯示出來。

                  
其他可能比較會用的參數:
complete:請求完成時執行的函式(不論結果是success或error)。
                 function (XMLHttpRequest, textStatus) {
                   // the options for this ajax request 
                 }
beforeSend:發送請求之前可在此修改XMLHttpRequest物件,如添加header等,你可以在此函式中return flase取消Ajax request。
                     function (XMLHttpRequest) { 
                          // the options for this ajax request 
                     }
其他更多相關的資訊:http://api.jquery.com/jQuery.ajax/
接下來編寫PHP:recive.php
echo $_POST["Text"];

下面是index.php 會看到的畫面。
當你打下AAA送出後會看到的畫面。
再來我們在recive.php 故意寫錯程式,如果你沒有加error,會找不出問題。讓你看看有什麼差別。
ehco              //故意的,你可以測測看。
echo $_POST["Text"];

2015年12月27日 星期日

電腦概論隨手筆記

資料結構
陣列array
堆疊stack
佇列queue
連結串列linked list
樹tree
圖graph
推heap
雜湊表hash table

資料結構英語:data structure)是電腦中儲存、組織資料的方式。
一個資料結構可被視為兩個函式之間的介面 ,或者是由資料類型聯合組成的儲存內容的存取方法封裝。

資料結構可以透過程式語言 提供的data type與reference及其他操作加以實作,盡可能較少的時間與空間

正確的資料結構選擇可以提高演算法的效率 ,程式設計的困難程度與最終成果的品質與表現,取決於是否選擇了最適合的資料結構。

絕大多數的語言都帶有某種程度上的模組化思想,透過將資料結構的具體實作封裝隱藏於使用者介面之後的方法,來讓不同的應用程式能夠安全地重用這些資料結構。C++JavaPython物件導向的程式語言可使用類別來達到這個目的。

陣列array
裝固定大小和相同資料型態的容器
arraylist
是一種動態陣列,資料可從中插入或刪除

推疊stack
處理資料後進先出的排成(EX:疊盤子)
住列queue
處理資料先進先出的排程(EX:排隊)

連結串列linked list
每個節點紀錄資料並且指向下一個節點,將節點串連起來
樹tree
一種階層式的資料集合
樹的最開始會有一個根節點,就像樹的樹根一樣,所有的資料都是由這裡開始發展,接著會有一些其他的節點,有些節點可能在最末端,稱之為葉節點,就像樹的樹葉一樣,其他的節點則像樹的樹枝一樣
在資料結構中的實作會有父節點和子節點的分別,所以可以進一步的定義:
  1. 樹存在一個為根節點,根節點沒有父節點(不可以有迴圈)。
  2. 每個節點只有一個父節點(子樹不交集)

雜湊表hash table
無論相同或相異的資料只要有相同的索引值,就會儲存到同一個格子

死結deadlock
一個執行緒鎖住一個變數資料,導致其他執行緒無窮等待

要死結必須要滿足以下四個條件
  1. Mutual exclusion:一個資源一次只能被一個process所使用
  2. Hold and Wait: process取得一個資源之後等待其他的資源
  3. No preemption:資源只能由process自己釋放,不能由其他方式釋放
  4. Circular wait:每個process都握有另一個process請求的資源,導致每一個process都在等待另一個process釋放資源
Deadlock Avoidance死結的避免
為了確保死結不會發生,我們定義一個安全的狀態--能夠分配給所有process資源而不會造成死
結,在不安全的狀態下則有可能發生死結,假設我們知道
  1. 系統目前可用的資源數量(Available)
  2. 各process對資源的最大需求量(max)
  3. 各process目前持有的資源量(allocation)
各系統還需多少資源(need) = max - allocation
Deadlock pretention預防死結
  1. Mutual exclusion:對不可共用的資源類型而言,互斥一定成立,而可共用的資源類型,因為可以同時讀取相同檔案,所以一定不會產生。
  2. Hold and Wait:process必須保證一個行程在要求一項資源時,不可以佔用任何其它的資源。
  3. No preemption:只要某個處理元要不到所要求的資源時,便把它已經擁有的資源釋放,然後再重新要求所要資源。
  4. Circular Wait:確保循環式等候的條件不成立,我們對所有的資源型式強迫安排一個線性的順序。


=========================相關聯結===============================
講義下載
http://www.cs.pu.edu.tw/~bcc/download.htm