2013-01-30

JQuery ajax response值給與另一變數的用法

我們都知道,ajax可以得到由另一個url回饋的東西,但有時候並非會直接在ajax的success中使用,我們把值丟給另一個變數…

而通常我們(其實只有我自己?)下意識的寫法會這樣
var ajax_response = "";
$.ajax({
   url: http://xxx.xxx.xxx.xxx/xxx.xxx,
   success: function(msg) {
      ajax_response = msg;
   }
});
alert(ajax_response);
但其實ajax中的success的ajax_response與外層的ajax_response是不相干,應該說是同一個ajax_response,但在這種寫法底下msg並沒有丟到ajax_response

原因在:http://api.jquery.com/jQuery.ajax/
jquery在ajax的async屬性中寫到,預設是非同步發送(By default, all requests are sent asynchronously)

那何謂非同步發送(或稱異步發送),其實就是為了保持頁面的執行效率,所以在ajax發送過程到url-server回應的中間,script會持續的往下運作,以免發生url-server timeout時間過久導致頁面delay的狀況。

但如同我們上述的寫法,在非同步的前提下,ajax_response是必須等到url-server回應之後才會取得msg(ajax的回饋),所以我們在alert(ajax_response)時會是空值…因為在alert之前,一般的url-server都沒有那麼快的回饋。

如果我們要改為同步,也就是必須先拿到ajax_response的話,只要在ajax的屬性中加上async: false即可。

2013-01-22

關於Cacti plugin manage中文問題

Cacti有一個plugin叫manage…

它可以建立site(看作區或)與group(組點)…

如果管理的網路拓樸不小且有在實際的位址有區域分別(什麼台北、台中區啦,或a棟、b棟的),可以使用site來建立區域別,再到group建立各區域別中的分點群。

不過以上不是我這一篇的重點。

主要是因為我最近在看我建立的cacti時發現,雖然在網頁上看到的是完整的中文,但進入phpmyadmin看到db中的name都是亂碼。
而且我直接用phpmyadmin針對name直接輸入中文按下修改之後發現它還是寫入亂碼。

我確定cacti建立connect是用utf8呀…?

還是因為我沒設定mysql的default charset?

ok,打開my.cnf,在[mysqld]中加上
default-character-set=utf8
default-collation=utf8_general_ci
用phpmyadmin直接寫中文的方式正常了,但cacti的網頁反而變成全亂碼。

後來再用cacti中提供的方式去改device的name,可以看到亂碼的地方都正常了,而且cacti回寫到mysql的值也是正常的中文。

但這邊manage這個plugin提供的site的地方還是亂碼…怎麼改我都改不好。

最後總算找到…

請到cacti/plugins/manage/manage_sites.php,找到
<?php
          print "<a class='linkEditMain' href='manage_sites.php?edit=1&id=".$host["id"]."'>";
          print ereg_replace("(" . preg_quote($_REQUEST["filter"]) . ")", "<span style='background-color: #F8D93D;'>\\1</span>", $host["name"]);
          ?>
地方,你會看到它做了ereg_replace…我有試著把$_REQUEST["filter"]印出來是空的…
再加上上述之前的有<td...><a....>,卻沒有</a>與</td>…真奇怪
所以乾脆就合併,也把ereg跟preg_quote拿掉…因為感覺沒有用,最後是下面
<?php
          print "<a class='linkEditMain' href='manage_sites.php?edit=1&id=".$host["id"]."'>" . $host["name"] . "</a>";
          //print ereg_replace("(" . preg_quote($_REQUEST["filter"]) . ")", "<span style='background-color: #F8D93D;'>\\1</span>", $host["name"]);
          ?>
這樣site中的中文就正常了