李威 さぽている

          小說翻譯,日語相關(guān)轉(zhuǎn)移至http://blog.hjenglish.com/liwei

          2010年8月10日 #

          JSONP 跨域原理小解

          最近看一些代碼時,邊看邊改代碼,發(fā)現(xiàn)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

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

           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標(biāo)簽。

          而服務(wù)器端會返回
          callbackFunction( { "x": 10, "y": 15} );
          這樣的數(shù)據(jù)。這其實是一段javascript代碼,
          callbackFunction是方法名,
          { "x": 10, "y": 15}是參數(shù)。客戶端代碼里必須要有
          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 }

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

          最后JQuery會調(diào)用匿名函數(shù)
          function(data),data即為json數(shù)據(jù)。

          JQuery已經(jīng)將客戶端部分實現(xiàn)了,服務(wù)器端也得遵循同樣的規(guī)則才能實現(xiàn)跨域。


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

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

          error code 0x80004005

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

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

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

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

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

          HTML5的audio標(biāo)簽很坑爹!

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

          幾經(jīng)搜索,最后發(fā)現(xiàn)的真相讓我很崩潰……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定義了媒體標(biāo)簽,但沒規(guī)定媒體的默認(rèn)編碼格式,導(dǎo)致各瀏覽器各自為政。
          真是不方便……

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

          PHP GD畫圖時出現(xiàn)的文字亂碼問題

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

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

          以上。

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

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

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

          TCPP.rar
          上網(wǎng)須謹(jǐn)慎,下載請殺毒。

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

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

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

          運(yùn)行李

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


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

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

          Sina App Enginge Beta

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

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

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

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

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

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

          現(xiàn)在還真不知道SAE會發(fā)展得如何……

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

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

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

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

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

          如何破掉防盜鏈機(jī)制

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

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

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

          Referer是瀏覽器發(fā)出的,只能更改瀏覽器才能更改Referer。

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

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

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

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

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

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

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

          主站蜘蛛池模板: 武义县| 昔阳县| 松潘县| 西城区| 吐鲁番市| 远安县| 通道| 永寿县| 财经| 浪卡子县| 武胜县| 长沙县| 孝义市| 斗六市| 宾阳县| 平潭县| 武清区| 色达县| 额尔古纳市| 岗巴县| 湛江市| 普洱| 浮梁县| 文化| 兴化市| 德州市| 涿州市| 张家港市| 屏东县| 泽州县| 高邮市| 巫溪县| 汉寿县| 平武县| 全州县| 宣城市| 青冈县| 呼伦贝尔市| 信阳市| 砀山县| 大丰市|