<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    李威 さぽている

    小說翻譯,日語相關轉移至http://blog.hjenglish.com/liwei

    2010年8月1日 #

    JSONP 跨域原理小解

    最近看一些代碼時,邊看邊改代碼,發現getJSON這個方法沒法正常使用。

    1 var sURL= "http://api.xxxxxx.com/services/feeds/   
    2    xxxxxxx?format=json&callback=?";
    3 $.getJSON(sURL, function(data) {
    4 // do something with the JSON data returned
    5 }); // end get

    究其原因,發現url里有個callback,這里使用的是JSONP,一種跨域技術。
    網上搜了下JSONP,多數都是在講如何使用,而沒有說明為什么它能跨域,且沒有說明url服務器端的代碼時如何生成的。
    http://www.west-wind.com/weblog/posts/2007/Jul/04/JSONP-for-crosssite-Callbacks
    這方面,上面的文章里有比較詳細的描述。

     1 function jsonp(url,callback,name, query)
     2 {                
     3     if (url.indexOf("?"> -1)
     4         url += "&jsonp=" 
     5     else
     6         url += "?jsonp=" 
     7     url += name + "&";
     8     if (query)
     9         url += encodeURIComponent(query) + "&";   
    10     url += new Date().getTime().toString(); // prevent caching        
    11     
    12     var script = document.createElement("script");        
    13     script.setAttribute("src",url);
    14     script.setAttribute("type","text/javascript");                
    15     document.body.appendChild(script);
    16 }

    客戶端的javascript代碼會有如上的操作,代碼不難,很容易理解,也就是加了一個script標簽。

    而服務器端會返回
    callbackFunction( { "x": 10, "y": 15} );
    這樣的數據。這其實是一段javascript代碼,
    callbackFunction是方法名,
    { "x": 10, "y": 15}是參數。客戶端代碼里必須要有
    callbackFunction方法的定義。

     1 public partial class JSONP : System.Web.UI.Page
     2 {
     3     protected void Page_Load(object sender, EventArgs e)
     4     {
     5         if (!string.IsNullOrEmpty(Request.QueryString["jsonp"]) )
     6             this.JsonPCallback();
     7     }
     8 
     9     public void JsonPCallback()
    10     {
    11         string Callback = Request.QueryString["jsonp"];
    12         if (!string.IsNullOrEmpty(Callback))
    13         {
    14             // *** Do whatever you need
    15             Response.Write(Callback + "( {\"x\":10 , \"y\":100} );");
    16         }
    17 
    18         Response.End();
    19     }
    20 }

    之后客戶端會調用callbackFunction
    使用JQuery的getJSON方法后,callback部分會變成如下形式。
    callback=jQuery1710461701650187642_1326201333794&_=1326201356534
    callbackFunction自然就是
    jQuery1710461701650187642_1326201333794部分了。
    返回來的數據也會是jQuery1710461701650187642_1326201333794( { "x": 10, "y": 15} ) 這種形式。

    最后JQuery會調用匿名函數
    function(data),data即為json數據。

    JQuery已經將客戶端部分實現了,服務器端也得遵循同樣的規則才能實現跨域。


    *這里有一點,JQuery如何將匿名函數換名字的?有哪位大俠知道的,請用簡單的語言講解下。

    posted @ 2012-01-10 21:30 李威 閱讀(345) | 評論 (0)編輯 收藏

    error code 0x80004005

    記錄一個小問題。
    在Win7系統上裝一個軟件時失敗,提示2個DLL沒有注冊成功。
    于是準備手動注冊。
    運行
    cd C:\WINDOWS\system32\
    regsvr32 xxx.dll
    后出現如下錯誤:
    The module "xxx.dll" was loaded but the call to DllRegisterServer failed with error code 0x80004005.

    網上搜索一番后,找到如下地址
    http://forums.cnet.com/7723-12546_102-237219.html
    其中有條說run as administrator,這是權限問題,不過我登陸的就是管理員賬號,應該不存在這樣的問題。

    抱著姑且一試的想法,寫了個cmd文件,右鍵run as administrator后,居然真的注冊成功了!

    看來Win7系統真的很安全,就算是管理員,也得來個run as administrator后才能做一些事,是在向sudo學習么?

    posted @ 2011-12-06 21:13 李威 閱讀(360) | 評論 (0)編輯 收藏

    HTML5的audio標簽很坑爹!

    最近試著用html5在頁面加載mp3文件。在chrome下測試通過了,偶然的用firefox4打開,居然沒法用……
    懷疑哪里寫錯了,可audio標簽也就幾個屬性而已。

    幾經搜索,最后發現的真相讓我很崩潰……firefox的audio不支持播放mp3。

    Codec support in modern desktop browsers
    Browser Ogg Vorbis MP3 WAV
    FireFox 3.6+ ?
    ?
    Safari 5+
    ? ?
    Chrome 6 ? ?
    Opera 10.5+ ?
    ?
    Internet Explorer 9 (beta)
    ? ?
    出自 http://html5doctor.com/native-audio-in-the-browser/

    看了這個表之后,雖然很多瀏覽器都支持html5,但如果你想播放一個文件,任何一種格式都不能讓所有瀏覽器正常播放。
    哈哈哈,html5定義了媒體標簽,但沒規定媒體的默認編碼格式,導致各瀏覽器各自為政。
    真是不方便……

    posted @ 2011-06-11 22:30 李威 閱讀(270) | 評論 (0)編輯 收藏

    PHP GD畫圖時出現的文字亂碼問題

    GD畫圖時通常顯示文字是用imagettftext方法,但它的參數必須是UTF-8編碼的。
    此時得注意php文件的編碼
    1.如果是UTF-8的,直接傳硬編碼字符串就可正常顯示
    2.如果是gb2312或其它的,則必須進行轉換 mb_convert_encoding($str, 'UTF-8')

    另外,還有一種情況,JIS-mapped Japanese Font Support被開啟時,imagettftext就必須傳SJIS編碼,傳UTF-8反而會亂碼。
    此時必須將其轉碼后傳入,mb_convert_encoding($sStr,"SJIS", "UTF-8")。

    以上。

    posted @ 2011-03-31 15:46 李威 閱讀(1051) | 評論 (0)編輯 收藏

    TurboC3.0英文版中界面邊框為亂碼問題的解決發法

    在次提供TurboC3.0英文版下載。

    TCPP.rar
    上網須謹慎,下載請殺毒。

    TC3.0窗口模式,邊框有中文亂碼。全屏就沒有。
    原因是當前的code page是中文的936,可以在cmd中用chcp命令查看。
    利用命令 chcp 437 改為老美的,就可以了。
    具體操作
    啟動TCPP.exe->File->DOS Shell->chcp 437->exit
    回到TCPP后就沒亂碼了。
    但這個方法治標不治本,每次啟動TCPP仍是亂碼。

    另一種方法
    在TCPP窗口的左上角單擊,出現菜單(包含最大化,最小化,屬性等),在默認選項的第一個頁面“選項”里Default code page選擇437 (OEM United Status)。因為我目前使用的是英文系統,不知道中文系統中是否有該項。如果沒有該項,請自行尋找方法讓它有。
    之后,一切OK,至少我OK了……

    posted @ 2011-01-26 19:26 李威 閱讀(708) | 評論 (0)編輯 收藏

    運行李

    中鐵快運 跨省 4.3元/KG
    一般3天到,但有時貨運量大,無法確定到貨時間
    上午10:30電話過去,說下午2點后才能來取貨,我說下午不在,比較緊急,實際上取貨師傅11點多就到了
    來取貨的人有2人,開的是面包車,能一次運走較多貨物
    貨物較散時會收15元包裝費。
    一般人不支持貨到付款,只有大客戶才支持。
    先交費,多退少補(一般會多收),發票不當場發,之后會聯系你或郵寄給送貨地址(具體不詳)。
    我是當天要離開,沒法將發票給我,他們說會將發票和多的錢放到包裝的貨物里。


    順豐快遞 跨省 1KG內20元,超過部分12元/KG
    到貨很快,合肥到杭州一天內能送到。
    來取貨的只有1人,開電動車,貨物較多時無法一次取完。
    支持貨到付款,無包裝費。
    客服說1小時內到,通常半小時左右會有取貨人來電話聯系,之后看情況,有時候半小時能到,有時候很拖。

    posted @ 2011-01-15 11:31 李威 閱讀(145) | 評論 (0)編輯 收藏

    Sina App Enginge Beta

    已經有人做了介紹
    http://www.hzlzh.com/sina-app-engine-beta/

    對我這種平時寫點小應用自娛自樂的個人開發者來說,最重要的變化就是SAE不再免費了
    1RMB=50云豆
    SAE進入beta后發放給內測開發者5000云豆,我去帳號里查看時剩下4945,感覺用得有些快
    平時也沒寫多少東西,也就10多個php頁面,以后還是側重玩GAE吧……

    雖然SAE相比GAE規模不大,但也有些不錯的地方
    譬如cron,同樣的5min間隔執行的東西,SAE比GAE更準些
    譬如客戶端,雖然SAE沒法在本地執行代碼,但能從服務器下載應用的最新代碼很不錯
    之前GAE寫的東西,有些是在公司電腦里寫的,有些是在家里寫的,現在都不知道家中電腦里的代碼是不是最新的了
    SAE進入beta后,能在線查看修改代碼,使用的編輯器是ecoder,http://ecoder.quintalinda.com/

    SAE很多其他功能還沒用到,就不多做評價了

    以下說點胡話吧
    國內整體環境有些急功近利,運營1年多了,沒任何收入,SAE也是國內第一個吃螃蟹的,能否盈利也不清楚,投資者沉不住氣,SAE團隊大概也是頂不住上層的壓力,迫不得已開始收費計劃。

    總感覺SAE還沒成熟到能收費的階段,因為SAE上的應用并不多,我只見到10多個而已
    應用能減少建站難度。應用少會限制SAE的用途,SAE面向的群體是什么呢,現在能干什么呢?個人的話,租php空間來干嘛,主要是搭博客,建論壇,搞CMS;想創業的,大概不會選SAE,因為限制太多,不如租主機,自由度更高;企業的話,注重的是穩定,現在還不會嘗試新出來的SAE
    開發SAE開源項目,SAE會獎勵云豆。應用不多這點也能靠收費來激發開發者多發開些SAE開源項目來彌補,不知效果會如何

    現在還真不知道SAE會發展得如何……

    預計近期SAE應該會開發注冊吧,新帳號里應該會有一些云豆,給開發者試用,然后期待這些新鮮血液帶來更多付費用戶和SAE開源項目,希望SAE能發展下去

    posted @ 2010-09-05 12:28 李威 閱讀(209) | 評論 (0)編輯 收藏

    笑話一則(其中的我不是博主)

    我出差的時候(是指在日本)
     張X(日本那邊的人)說:“這個叫李X的代碼寫得真爛啊。”
    我:“他是我室友。”過了一會
    張X:“這個叫唐XX的寫得更爛。”
    我:“這個是我前室友。”再過了一會
    張X很無奈地問我:“這個叫鄭X一定是你的前前室友吧?”
    我。。。

    posted @ 2010-08-26 22:43 李威 閱讀(148) | 評論 (0)編輯 收藏

    如何破掉防盜鏈機制

    今天遇到一個問題,寫了一個頁面,抓取其他某站點的內容,然后重組成新的頁面,主要是一個圖片的展示(gallery)。

    但是該站點做了防盜鏈,圖片無法顯示,403.

    這種盜鏈主要是靠Referer來實現的,也就是說更改了Referer就能顯示圖片,但Referer不是在頁面編碼能解決的。

    Referer是瀏覽器發出的,只能更改瀏覽器才能更改Referer。

    firefox有一個插件refcontrol,可以做到這一點,不過不是我要說的

    繼續研究,該站提供一種embed功能,供其他頁面調用,此時就能允許其他站點直接顯示圖片。
    一般網站是不提供這種功能的,所以下面方法并不是所有網站適用的。

    通過對比header內容,最終知道是它在cookie里設定了一個字段,以此來判別。

    那么,只要我設定該值即可。
    兩種方法
    1.服務器端設定set-cookie,試驗證明,此法不可行,主要是domain無法更改到對應站點的domain下
    2.客戶端用javascript設定document.cookie。仍不行……,原因不明,大概也是無法改domain吧

    這下只剩最后一招了,在我的頁面里直接調用embed頁面,讓它替我設cookie,如何調用呢?
    首先想到用frame,試了下,frame和圖片幾乎同時發出request,這樣cookie還沒設定,請求圖片肯定403.
    又想到onload,呃,是在body完了后才調用,肯定不行
    后來看到,html的head里的文件先下載完畢后,再請求圖片。這點我以前也提到過,javascript代碼的執行順序 
    head里主要有2種文件調用,js和css。
    這里就不是什么正規寫法了,因為embed頁面既不是js文件,也不是css文件,但瀏覽器是不會管這個的,直接調用。
    一般也不會這么用……旁門左道
    先用了js這種,在src里寫上embed頁面地址,可以顯示圖片,但有個javascript錯誤。
    接著改進,用css的,會發現最終調用了兩次,一次是在開始,還有一次是在所有其他head文件全下載完之后
    有些小影響,但問題不大。

    時間比較晚,就懶得加上試驗代碼,OK,就這樣,完工。

    posted @ 2010-08-10 00:19 李威 閱讀(842) | 評論 (0)編輯 收藏

    javascript兩則思考

    1.
    http://www.jsforest.org/2010/07/29/js-this指向的小測試/


    這個說是在考this的指向,實際上是在考變量的作用域。
    先說其中第二題。o是一個對象,doIt是它的方法,那么doIt的this自然指向o
    第二題結果為10無懸念。

    再來看第一題,在doIt的內部加入了一個setTimeout方法,setTimeout又調用了一個匿名方法。
    在javascript中,函數(或方法)也是對象,那么匿名方法中的this應該指向doIt,結果為20.

    實際上將代碼跑了下,第一題結果為5.哪里錯了?

    問題出在setTimeout。
    window.setTimeout(code, delay)
    
    When code is executed, it is executed in the context of the Window object. If code is a function, the Window object is the value of the this keyword. If code is a string, it is evaluated in the global scope with the Window object as the only object on the scope chain. This is true even if the call to setTimeout( ) occurred within a function with a longer scope chain.

    這段話說明了setTimeout不管在哪里執行,其作用域都是在Window下,this一直指向Window。
    第一題的x=5是全局變量,Window作用域下的。

    這題說是在考this的指向,原來最終考的是個setTimeout的問題……被耍了



    2.
    http://www.css88.com/archives/2429

    看到這個問題,首先注意到的是第一個用了===,第二個沒有,而javascript是個弱類型語言,使用provisionalTable[item]取值沒判斷類型。
    然后,試著找了Object中判斷值是否存在的方法,譬如provisionalTable.item ,in等都沒判斷類型。
    想法一,重載[]方法,不過,這個怎么重載?又不是個function
    想法二,數字是利用toString()轉成字符串的,那么重載Number.prototype.toString=function(){return this;}; 6=='6'返回false了,但provisionalTable[item]取值還是一樣
    想法三,provisionalTable同時存在6和'6'時,provisionalTable[item]能區分這兩者,那么在provisionalTable中加入一個設為true時,將另一個也加入,并設為false。但這樣會有效率問題,事實上,acsu提出的方法里僅僅加了個typeof方法,就將效率損失殆盡。
    突然想到,這個問題不是找解決方法,而是找最優方法
    嗯,作罷,效率問題不是我等小民該考慮的,這個必須從根本上重構javascript才行

    不過思考下,還是能學到很多東西的

    posted @ 2010-08-05 22:07 李威 閱讀(152) | 評論 (0)編輯 收藏

    如何讓博客支持PubSubHubbub

    http://code.google.com/p/pubsubhubbub/ 
    pubsubhubbub是google開發的一種Atom和RSS增強協議,能夠接近實時發布信息。
    也就是說,如果blogjava支持了pubsubhubbub,我在這里發布了博客,你就可以在你的閱讀器里很快看到我的文章。
    現在只有部分博客服務商提供了pubsubhubbub功能,譬如WordPress,FriendFeed,livedoor等。

    pubsubhubbub的原理很簡單。它由3部分組成,pub,sub,hub(最后的bub不是的,hubbub是騷動的意思)。
    pub可以看成是博客,sub是閱讀器,而hub是一個中轉站。通常是由sub向pub請求內容,而pubsubhubbub是由sub想hub請求,hub再向pub請求,多一層hub的作用是降低pub的壓力。hub收到pub的更新后,會向sub發布最新的內容。
    因為不是pub直接向sub發布,所以這里說的“接近”實時發布信息。

    那么如何讓博客支持pubsubhubbub呢?只需要建立一個hub服務器,然后在生產rss時加入
    <atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/>
    http://pubsubhubbub.appspot.com就是hub服務器的地址。
    <?xml version="1.0"?>
    <rss xmlns:atom="http://www.w3.org/2005/Atom">
      
    <channel>
        
    <atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/>
        
      
    </channel>
    </rss>
    因此判斷博客是否正常pubsubhubbub,也很簡單,查看http://www.tkk7.com/liwei/rss的代碼即可,沒有hub的影子。
    再看一個支持的例子 http://rasjacobson.wordpress.com/feed/ ,里面有一句 <atom:link rel='hub' /> ,這個是支持的。

    具體的hub實現請查看
    http://code.google.com/p/pubsubhubbub/wiki/Hubs
    我這里只是個人玩玩而已,沒實力自己搭hub服務器。不過可以借助他人提供的hub服務器,譬如剛才appspot的。

    知道了原理,接下來就好辦。
    因為要改代碼才能修改生產的RSS,所以blogjava這種博客服務商不提供pubsubhubbub功能的話,我們這些用戶是無能為力的。

    但自建的獨立博客是能簡單支持。等咱啥時候有閑錢了,再去做吧……

    posted @ 2010-08-01 01:35 李威 閱讀(299) | 評論 (0)編輯 收藏

    主站蜘蛛池模板: 亚洲AV无码国产剧情| 亚洲精品第一综合99久久| 黄页网站在线视频免费| 午夜网站免费版在线观看| 亚洲日韩AV一区二区三区中文| www视频免费看| 亚洲人成在线中文字幕| 毛片a级毛片免费播放下载| 亚洲一卡2卡4卡5卡6卡在线99| 久久久高清免费视频| 国产成人亚洲精品| 精品国产一区二区三区免费看| 国产亚洲一卡2卡3卡4卡新区| 免费无遮挡无码永久在线观看视频| 亚洲精品蜜夜内射| 免费国产小视频在线观看| 亚洲AV成人无码久久WWW| 日批日出水久久亚洲精品tv| 特级毛片在线大全免费播放| 亚洲熟妇中文字幕五十中出| 先锋影音资源片午夜在线观看视频免费播放 | 亚洲成人网在线观看| 国产成人精品久久免费动漫 | 亚洲高清乱码午夜电影网| 日韩毛片无码永久免费看| 免费一级毛suv好看的国产网站| 国产91精品一区二区麻豆亚洲| 热99RE久久精品这里都是精品免费 | 久青草视频在线观看免费| 久久综合日韩亚洲精品色| 免费不卡视频一卡二卡| 亚洲av永久中文无码精品| 国产亚洲午夜高清国产拍精品| 亚洲视频免费在线观看| 亚洲三级高清免费| 亚洲女人被黑人巨大进入| 曰批全过程免费视频网址| 午夜亚洲国产理论片二级港台二级| 亚洲阿v天堂在线2017免费| 免费无遮挡无码永久视频| 亚洲日韩国产AV无码无码精品|