參考1: http://www.jqmobile.org/thread-254-1-1.html
參考2: http://liuwenxin.blog.51cto.com/4436000/1032260
問題:用a標記的href鏈接跳轉到目的頁面時,綁定的$(document).ready()不執行,需要刷新頁面才能執行?
解決:jquery mobile頁面跳轉是ajax跳轉,所以$(document).ready()是不執行的,如果想用a標記跳轉過來執行一些函數的話有兩種方法:
(1).用js的window.location.href=url跳轉,或者在a標記裡寫rel="external",這樣頁面就脫離了jquery mobile框架,到了一個新的頁面;
(2).給目的頁面的page加一個id,例如:indexPage,給indexPage綁定pageinit事件,$('#indexPage').live('pageinit',function(event){});就可以了,其實jquery mobile頁面的跳轉就是不同page直接的切換
法1: 如果你原本的超連結標籤是寫成<a href="news.htm" >最新消息</a> 當去點選此連結時,切換到news.htm時,它是不會執行javascript的程式碼,必須在標籤上多加上rel="external"寫法如下 <a href="news.htm" rel="external">最新消息</a>
2013年11月28日 星期四
2013年11月3日 星期日
ASP.NET 網頁互傳值
a.aspx
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
Dim Subm As HttpContext = HttpContext.Current
Subm.Items.Add("Page_title", "Hello")
Subm.Items.Add("temp_x","大家好" )
Server.Transfer("b.aspx", True) '傳給b.aspx
End If
End Sub
b.aspx
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
Dim Req As HttpContext = HttpContext.Current
Page.Title = Req.Items("Page_title")
Response.Write Req.Items("temp_x")
End If
End Sub
2013年10月22日 星期二
PHP 字串.搜尋.取代,實作Session購物車
以往在實作商品購物車的時候都會先把顧客的商品儲存在Session裡,當顧客要結帳或者想暫時存放在自己的購物車時就能得知顧客選了哪些商品及數量。
說明:
此篇假設我選完商品,但我想取消某個商品。其他說明直接寫在程式碼註解中,不再多作解釋。
程式碼如下:
說明:
此篇假設我選完商品,但我想取消某個商品。其他說明直接寫在程式碼註解中,不再多作解釋。
程式碼如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>字串.搜尋.取代</title>
</head>
<body>
<?php
$search_temp='P112'; //要取消的商品編號
$str_temp='P111=2;P112=1;P113=3;'; //假設這是商品編號=數量;
//取得字串起始位置
$start=strpos($str_temp,$search_temp); //strpos(字串,要搜尋的字串,起始位置) 起始位置如果是0可以不用寫
if(gettype($start)!="integer"){
$start=-1; //沒有找到字串
}
if ($start!=-1){
//不等於-1代表有找到商品
$end=strpos($str_temp,';',$start);
$end2=($end-$start)+1; //取幾個字元
$get_strtemp=mb_substr($str_temp,$start,$end2,'UTF-8');//取出某個範圍的字串 mb_substr(搜尋某個字串,起始位置,取幾個字元,'UTF-8')
echo $start.';'.$end."<br/>";
echo '擷取出來的字串,也就是要取消的商品:'.$get_strtemp."<br/>";
$str_temp=str_replace($get_strtemp,'',$str_temp); //取消的商品後的字串
echo $str_temp;
}else{
//等於-1沒有找到商品
echo '紀錄中沒有這項商品';
}
?>
</body>
</html>
2013年10月10日 星期四
Android HttpURLConnection post 傳遞資料到 server 回傳JSON資料
參考資料:
1.How to use HttpURLConnection POST data to web server?
2.How to connect Android with PHP, MySQL (如果你是用PHP+MySQL可參考,而我是參考此篇的寫法)
如果你還不懂AsyncTask,以下是必看文章
3.使用AsyncTask執行非同步任務
4.Android中AsyncTask的使用與源碼分析
以下假設是在順利執行的情況下
步驟:
Step 1.先在Eclipse建立Android專案(Android版本我是用4.3),建立完成後,先新增一個class名為JSONParser,程式碼如下:
P.S原則上我是參考資料2的做法,只是改成java的HttpURLConnection
JSONParser.java
package com.androidhive.jsonparsing;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import org.json.JSONException;
import org.json.JSONObject;
import android.util.Log;
public class JSONParser {
static JSONObject jObj = null;
static String json = "";
// constructor
public JSONParser() {}
// getJSONFromUrl方法為單存取資料用
public JSONObject getJSONFromUrl(String temp_url) {
HttpURLConnection conn = null;
// Making HTTP request
try {
// 建立連線
URL url =new URL(temp_url);
conn = (HttpURLConnection)url.openConnection();
//===============================
//下面註解兩行可有可無
//conn.setReadTimeout(10000);
//conn.setConnectTimeout(15000);
//===============================
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true);
conn.connect();
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
reader.close();
json = sb.toString();
}catch (Exception e) {
System.out.println("getJSONFromUrl Exception Error :"+e);
}finally {
if (conn != null) {
conn.disconnect();
}
}
// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "getJSONFromUrl Error parsing data " + e.toString());
}
return jObj;
}
public JSONObject makeHttpRequest(String temp_url, String method, String urlParameters){
HttpURLConnection conn = null;
try{
// 建立連線
URL url =new URL(temp_url);
conn = (HttpURLConnection)url.openConnection();
//===============================
//下面註解兩行可有可無
conn.setReadTimeout(10000);
conn.setConnectTimeout(15000);
//===============================
conn.setRequestMethod(method); //URL 請求的方法
//發送表單類型資料,設定請求標頭
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
//設定要傳送的資料長度
conn.setRequestProperty("Content-Length", "" + Integer.toString(urlParameters.getBytes().length));
//設定內容語言
conn.setRequestProperty("Content-Language", "zh-tw");
conn.setUseCaches (false);
conn.setDoInput(true);
conn.setDoOutput(true);
//Send request
DataOutputStream wr = new DataOutputStream (conn.getOutputStream ());
wr.writeBytes (urlParameters);
wr.flush ();
wr.close ();
//Get Response
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
String line;
StringBuffer sb = new StringBuffer();
while((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
reader.close();
json = sb.toString();
}catch (Exception e) {
System.out.println("makeHttpRequest Error:"+e.toString());
}finally {
if (conn != null) {
conn.disconnect();
}
}
// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "getJSONFromUrl Error parsing data " + e.toString());
}
// return JSON String
return jObj;
}
}
Step 2.再來是直接使用剛剛建立好的JSONParser類別來傳資料取資料,程式碼如下:
P.S以下有些程式碼您必須自行修改,別照抄
Item2.java
package com.android.school;
import com.androidhive.jsonparsing.JSONParser;
import android.os.AsyncTask; //處理非同步
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.app.Activity;
import android.os.Bundle;
public class Item2 extends Activity {
//JSON節點名稱名稱,
String T_temp1= "test";
//JSON節點名稱,也就是要取資料的欄位名稱,必須要以網頁回傳的為主,如:"欄位1,欄位2,欄位3..."
String get_str="test1,test2,test3";
JSONParser jParser; //剛剛建立的JSONParser類別
JSONObject json;
JSONArray contacts = null;
Item2_AT I_AT; //非同步AsyncTask類別
EditText txt2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_item2);
Button B1=(Button)findViewById(R.id.button1);
B1.setOnClickListener(B1_Click);
txt2=(EditText)findViewById(R.id.editText2);
//假如你是連結自己的IIS必須寫10.0.2.2:port,因為預設iis的port為80
new Item2_AT().execute("url","http://10.0.2.2:80/TEST/TEST.aspx");
}
private OnClickListener B1_Click=new OnClickListener(){
public void onClick(View v){
I_AT=new Item2_AT();
System.out.println("return="+I_AT.execute("select","http://10.0.2.2:80/TEST/TEST.aspx"));
}
};
class Item2_AT extends AsyncTask<String, Integer, Integer>{
//================================================================
//必須建立
//execute("http://10.0.2.2:80/TEST/TEST.aspx")會傳給doInBackground
//doInBackground(String... param)代表傳入的值可以帶入很多個參數 如:new Item2_AT().execute("1","2");
@Override
protected Integer doInBackground(String... param) {
int Judge;
//get Data 單存取資料
if (param[0].equals("url")==true){
// Creating JSON Parser instance
jParser = new JSONParser();
// getting JSON string from URL
json = jParser.getJSONFromUrl(param[1]);
}else if (param[0].equals("select")==true){
String urlParameters="0";
try{
urlParameters ="sid="+URLEncoder.encode(txt2.getText().toString(), "UTF-8");
Judge=1;
}catch(UnsupportedEncodingException e){
System.out.println("UnsupportedEncodingException error:"+e.toString());
Judge=0;
}
if (Judge==1){
// Creating JSON Parser instance
jParser = new JSONParser();
//param[1] 儲存的是url網址
json = jParser.makeHttpRequest(param[1],"POST",urlParameters);
}
}
return null;
}
@Override
protected void onPostExecute(Integer result) {
//此method是在doInBackground完成以後,才會呼叫的
super.onPostExecute(result);
EditText txt=(EditText)findViewById(R.id.editText1);
//show Data
String str_temp;
try {
String[] T_temp1f=get_str.split(","); //分割字串
// Getting Array of Contacts
contacts = json.getJSONArray(T_temp1);
// looping through All Contacts
for(int i = 0; i < contacts.length(); i++){
str_temp="";
JSONObject c = contacts.getJSONObject(i);
for (int x=0;x<T_temp1f.length;x++){
if (x==T_temp1f.length-1){
str_temp=str_temp + c.getString(T_temp1f[x])+";\n";
}else{
str_temp=str_temp + c.getString(T_temp1f[x])+",";
}
}
txt.setText(txt.getText()+ str_temp);
}
} catch (JSONException e) {
txt.setText("JSON error:"+e.toString());
System.out.println("JSON error:"+e.toString());
}catch (Exception e) {
txt.setText("Error:"+e.toString());
System.out.println("Error:"+e.toString());
}
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
//=============================================================
}
}
Step 3.建立要連結的網頁,因為我是連結ASP.NET的網頁,所以已ASP.NET為主,如果你沒有測試的網頁,可以試著連結這個網頁取資料 http://api.androidhive.info/contacts/ ,如果你是用測試的網頁 Android 部分就改用這個方法去取得資料getJSONFromUrl,但Android程式碼的寫法就要改成這篇的寫法 How to connect Android with PHP, MySQL ,因為我的程式碼是用他的來改過的,所以有些部分就不一樣
P.S以下程式碼,可以先看看此篇會比較清楚 ASP.NET 產生 JSON 資料
TEST.aspx.vb
Imports System
Imports System.Data
Imports System.Data.SqlClient
'Json.NET相關的命名空間
Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq
Partial Class FSA_Student
Inherits System.Web.UI.Page
Dim strsqlCon As String = "Data Source=.\SQLEXPRESS;Initial Catalog=資料庫名稱;Trusted_Connection=True;"
Dim str_sql As String
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
Dim p_value As String = Nothing
'sql指令
str_sql = "Select test1,test2,test3 from test where test1=@test1"
If Not Request.Form("sid") Is Nothing Then
p_value = Request.Form("sid")
ELSE
p_value = "0" '沒有接收到值,預設先指定一個參數值
End If
'function queryDataTable(sql指令, 參數名稱, 參數值) 方法執行完會回傳DataTable
Dim dt As DataTable = queryDataTable(str_sql, "@test1", p_value)
Dim str_json As String = JsonConvert.SerializeObject(dt)
str_json = str_json.Replace(" ", "") '將空白取代掉
Response.Write("{" & Chr(34) & "test" & Chr(34) & ":" & str_json & "}")
End If
End Sub
Function queryDataTable(ByVal sql_str As String, ByVal pv As String, ByVal pv_value As String) As DataTable
Dim sql_p() As String = Nothing
sql_p = pv.Split(",") 'sql字串中的參數
Dim sqlvalue_p() As String = Nothing
sqlvalue_p = pv_value.Split(",") 'sql字串中的參數值
Dim ds As New DataSet()
Using conn As New SqlConnection(strsqlCon)
Dim command As SqlCommand = New SqlCommand(str_sql, conn)
Dim x_end As Integer = sql_p.Length - 1
For x As Integer = 0 To x_end
command.Parameters.AddWithValue(sql_p(x), sqlvalue_p(x)) '讓ADO.NET自行判斷型別轉換
Next
Dim da As New SqlDataAdapter()
da.SelectCommand = command
da.Fill(ds)
End Using
If ds.Tables.Count > 0 Then
Return ds.Tables(0)
Else
Return New DataTable()
End If
End Function
End Class
1.How to use HttpURLConnection POST data to web server?
2.How to connect Android with PHP, MySQL (如果你是用PHP+MySQL可參考,而我是參考此篇的寫法)
如果你還不懂AsyncTask,以下是必看文章
3.使用AsyncTask執行非同步任務
4.Android中AsyncTask的使用與源碼分析
以下假設是在順利執行的情況下
步驟:
Step 1.先在Eclipse建立Android專案(Android版本我是用4.3),建立完成後,先新增一個class名為JSONParser,程式碼如下:
P.S原則上我是參考資料2的做法,只是改成java的HttpURLConnection
JSONParser.java
package com.androidhive.jsonparsing;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import org.json.JSONException;
import org.json.JSONObject;
import android.util.Log;
public class JSONParser {
static JSONObject jObj = null;
static String json = "";
// constructor
public JSONParser() {}
// getJSONFromUrl方法為單存取資料用
public JSONObject getJSONFromUrl(String temp_url) {
HttpURLConnection conn = null;
// Making HTTP request
try {
// 建立連線
URL url =new URL(temp_url);
conn = (HttpURLConnection)url.openConnection();
//===============================
//下面註解兩行可有可無
//conn.setReadTimeout(10000);
//conn.setConnectTimeout(15000);
//===============================
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true);
conn.connect();
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
reader.close();
json = sb.toString();
}catch (Exception e) {
System.out.println("getJSONFromUrl Exception Error :"+e);
}finally {
if (conn != null) {
conn.disconnect();
}
}
// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "getJSONFromUrl Error parsing data " + e.toString());
}
return jObj;
}
public JSONObject makeHttpRequest(String temp_url, String method, String urlParameters){
HttpURLConnection conn = null;
try{
// 建立連線
URL url =new URL(temp_url);
conn = (HttpURLConnection)url.openConnection();
//===============================
//下面註解兩行可有可無
conn.setReadTimeout(10000);
conn.setConnectTimeout(15000);
//===============================
conn.setRequestMethod(method); //URL 請求的方法
//發送表單類型資料,設定請求標頭
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
//設定要傳送的資料長度
conn.setRequestProperty("Content-Length", "" + Integer.toString(urlParameters.getBytes().length));
//設定內容語言
conn.setRequestProperty("Content-Language", "zh-tw");
conn.setUseCaches (false);
conn.setDoInput(true);
conn.setDoOutput(true);
//Send request
DataOutputStream wr = new DataOutputStream (conn.getOutputStream ());
wr.writeBytes (urlParameters);
wr.flush ();
wr.close ();
//Get Response
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
String line;
StringBuffer sb = new StringBuffer();
while((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
reader.close();
json = sb.toString();
}catch (Exception e) {
System.out.println("makeHttpRequest Error:"+e.toString());
}finally {
if (conn != null) {
conn.disconnect();
}
}
// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "getJSONFromUrl Error parsing data " + e.toString());
}
// return JSON String
return jObj;
}
}
Step 2.再來是直接使用剛剛建立好的JSONParser類別來傳資料取資料,程式碼如下:
P.S以下有些程式碼您必須自行修改,別照抄
Item2.java
package com.android.school;
import com.androidhive.jsonparsing.JSONParser;
import android.os.AsyncTask; //處理非同步
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.app.Activity;
import android.os.Bundle;
public class Item2 extends Activity {
//JSON節點名稱名稱,
String T_temp1= "test";
//JSON節點名稱,也就是要取資料的欄位名稱,必須要以網頁回傳的為主,如:"欄位1,欄位2,欄位3..."
String get_str="test1,test2,test3";
JSONParser jParser; //剛剛建立的JSONParser類別
JSONObject json;
JSONArray contacts = null;
Item2_AT I_AT; //非同步AsyncTask類別
EditText txt2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_item2);
Button B1=(Button)findViewById(R.id.button1);
B1.setOnClickListener(B1_Click);
txt2=(EditText)findViewById(R.id.editText2);
//假如你是連結自己的IIS必須寫10.0.2.2:port,因為預設iis的port為80
new Item2_AT().execute("url","http://10.0.2.2:80/TEST/TEST.aspx");
}
private OnClickListener B1_Click=new OnClickListener(){
public void onClick(View v){
I_AT=new Item2_AT();
System.out.println("return="+I_AT.execute("select","http://10.0.2.2:80/TEST/TEST.aspx"));
}
};
class Item2_AT extends AsyncTask<String, Integer, Integer>{
//================================================================
//必須建立
//execute("http://10.0.2.2:80/TEST/TEST.aspx")會傳給doInBackground
//doInBackground(String... param)代表傳入的值可以帶入很多個參數 如:new Item2_AT().execute("1","2");
@Override
protected Integer doInBackground(String... param) {
int Judge;
//get Data 單存取資料
if (param[0].equals("url")==true){
// Creating JSON Parser instance
jParser = new JSONParser();
// getting JSON string from URL
json = jParser.getJSONFromUrl(param[1]);
}else if (param[0].equals("select")==true){
String urlParameters="0";
try{
urlParameters ="sid="+URLEncoder.encode(txt2.getText().toString(), "UTF-8");
Judge=1;
}catch(UnsupportedEncodingException e){
System.out.println("UnsupportedEncodingException error:"+e.toString());
Judge=0;
}
if (Judge==1){
// Creating JSON Parser instance
jParser = new JSONParser();
//param[1] 儲存的是url網址
json = jParser.makeHttpRequest(param[1],"POST",urlParameters);
}
}
return null;
}
@Override
protected void onPostExecute(Integer result) {
//此method是在doInBackground完成以後,才會呼叫的
super.onPostExecute(result);
EditText txt=(EditText)findViewById(R.id.editText1);
//show Data
String str_temp;
try {
String[] T_temp1f=get_str.split(","); //分割字串
// Getting Array of Contacts
contacts = json.getJSONArray(T_temp1);
// looping through All Contacts
for(int i = 0; i < contacts.length(); i++){
str_temp="";
JSONObject c = contacts.getJSONObject(i);
for (int x=0;x<T_temp1f.length;x++){
if (x==T_temp1f.length-1){
str_temp=str_temp + c.getString(T_temp1f[x])+";\n";
}else{
str_temp=str_temp + c.getString(T_temp1f[x])+",";
}
}
txt.setText(txt.getText()+ str_temp);
}
} catch (JSONException e) {
txt.setText("JSON error:"+e.toString());
System.out.println("JSON error:"+e.toString());
}catch (Exception e) {
txt.setText("Error:"+e.toString());
System.out.println("Error:"+e.toString());
}
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
//=============================================================
}
}
Step 3.建立要連結的網頁,因為我是連結ASP.NET的網頁,所以已ASP.NET為主,如果你沒有測試的網頁,可以試著連結這個網頁取資料 http://api.androidhive.info/contacts/ ,如果你是用測試的網頁 Android 部分就改用這個方法去取得資料getJSONFromUrl,但Android程式碼的寫法就要改成這篇的寫法 How to connect Android with PHP, MySQL ,因為我的程式碼是用他的來改過的,所以有些部分就不一樣
P.S以下程式碼,可以先看看此篇會比較清楚 ASP.NET 產生 JSON 資料
TEST.aspx.vb
Imports System
Imports System.Data
Imports System.Data.SqlClient
'Json.NET相關的命名空間
Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq
Partial Class FSA_Student
Inherits System.Web.UI.Page
Dim strsqlCon As String = "Data Source=.\SQLEXPRESS;Initial Catalog=資料庫名稱;Trusted_Connection=True;"
Dim str_sql As String
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
Dim p_value As String = Nothing
'sql指令
str_sql = "Select test1,test2,test3 from test where test1=@test1"
If Not Request.Form("sid") Is Nothing Then
p_value = Request.Form("sid")
ELSE
p_value = "0" '沒有接收到值,預設先指定一個參數值
End If
'function queryDataTable(sql指令, 參數名稱, 參數值) 方法執行完會回傳DataTable
Dim dt As DataTable = queryDataTable(str_sql, "@test1", p_value)
Dim str_json As String = JsonConvert.SerializeObject(dt)
str_json = str_json.Replace(" ", "") '將空白取代掉
Response.Write("{" & Chr(34) & "test" & Chr(34) & ":" & str_json & "}")
End If
End Sub
Function queryDataTable(ByVal sql_str As String, ByVal pv As String, ByVal pv_value As String) As DataTable
Dim sql_p() As String = Nothing
sql_p = pv.Split(",") 'sql字串中的參數
Dim sqlvalue_p() As String = Nothing
sqlvalue_p = pv_value.Split(",") 'sql字串中的參數值
Dim ds As New DataSet()
Using conn As New SqlConnection(strsqlCon)
Dim command As SqlCommand = New SqlCommand(str_sql, conn)
Dim x_end As Integer = sql_p.Length - 1
For x As Integer = 0 To x_end
command.Parameters.AddWithValue(sql_p(x), sqlvalue_p(x)) '讓ADO.NET自行判斷型別轉換
Next
Dim da As New SqlDataAdapter()
da.SelectCommand = command
da.Fill(ds)
End Using
If ds.Tables.Count > 0 Then
Return ds.Tables(0)
Else
Return New DataTable()
End If
End Function
End Class
2013年10月9日 星期三
ASP.NET 產生 JSON 資料
參考資料:
1.[ASP.net WebForm] 利用JSON.net 實現 DataTable轉JSON字串、JSON字串轉DataTable (程式碼短少) 以下的作法都是參考此篇
前置作業:必須先到 http://json.codeplex.com/ 下載JSON.NET套件,然後將套件載入道專案中
VB.NET 程式碼如下:
法1. 運用JArray陣列來產生JSON資料
'Json.NET相關的命名空間
Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
Dim ja As New JArray
Dim jo As New JObject
jo.Add("success", "1")
jo.Add("message", "successfully created.")
ja.Add(jo)
Dim str_json As String = JsonConvert.SerializeObject(ja, Formatting.Indented)
Response.Write("{" & Chr(34) & "test" & Chr(34) & ":" & str_json & "}")
End If
End Sub
法2.取出資料庫資料轉成JSON資料
Imports System
Imports System.Data
Imports System.Data.SqlClient
'Json.NET相關的命名空間
Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
Dim str_sql As String = Nothing
Dim p_value As String = Nothing
'假設要取得某一筆資料
str_sql = "Select test1,test2,test3 from test where test1=@test1 and test2=@test2"
'假設已經指定好參數,也就是sql指令的@test1,@test2,那就必須指定參數的值,如有多個參數值就已,號隔開
p_value = "台南市,某家商店"
'function queryDataTable(sql指令, 參數名稱, 參數值) 方法執行完會回傳DataTable
Dim dt As DataTable = queryDataTable(str_sql, "@test1,@test2", p_value)
Dim str_json As String = JsonConvert.SerializeObject(dt)
str_json = str_json.Replace(" ", "") '將空白取代掉
Response.Write("{" & Chr(34) & "test" & Chr(34) & ":" & str_json & "}")
End If
End Sub
Function queryDataTable(ByVal sql_str As String, ByVal pv As String, ByVal pv_value As String) As DataTable
Dim strsqlCon As String = "Server=127.0.0.1;Database=資料庫名稱;uid=帳號;pwd=密碼"
Dim sql_p() As String = Nothing
'可把split改成 Regex.Split,例如:Regex.Split("123<br/>456", "\<br\/\>") '\跳脫字元
sql_p = pv.Split(",") 'sql字串中的參數
Dim sqlvalue_p() As String = Nothing
sqlvalue_p = pv_value.Split(",") 'sql字串中的參數值
Dim ds As New DataSet()
Using conn As New SqlConnection(strsqlCon)
Dim command As SqlCommand = New SqlCommand(str_sql, conn)
Dim x_end As Integer = sql_p.Length - 1
For x As Integer = 0 To x_end
command.Parameters.AddWithValue(sql_p(x), sqlvalue_p(x)) '讓ADO.NET自行判斷型別轉換
Next
Dim da As New SqlDataAdapter()
da.SelectCommand = command
da.Fill(ds)
End Using
If ds.Tables.Count > 0 Then
Return ds.Tables(0)
Else
Return New DataTable()
End If
End Function
補充:
JSON資料轉成DataTable,並將資料傳給GridView1
'Label1.Text值 [{ "test1" : "台南市" , "test2" : "某家商店" },{ "test1" : "台南市" , "test2" : "某家商店1" },{ "test1" : "台南市" , "test2" : "某家商店2" }]
Dim str_data As String = Label1.Text.Replace(" ", "")
Dim dt As DataTable = JsonConvert.DeserializeObject(Of DataTable)(str_data)
GridView1.DataSource = dt
GridView1.DataBind()
以上 End
1.[ASP.net WebForm] 利用JSON.net 實現 DataTable轉JSON字串、JSON字串轉DataTable (程式碼短少) 以下的作法都是參考此篇
前置作業:必須先到 http://json.codeplex.com/ 下載JSON.NET套件,然後將套件載入道專案中
VB.NET 程式碼如下:
法1. 運用JArray陣列來產生JSON資料
'Json.NET相關的命名空間
Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
Dim ja As New JArray
Dim jo As New JObject
jo.Add("success", "1")
jo.Add("message", "successfully created.")
ja.Add(jo)
Dim str_json As String = JsonConvert.SerializeObject(ja, Formatting.Indented)
Response.Write("{" & Chr(34) & "test" & Chr(34) & ":" & str_json & "}")
End If
End Sub
法2.取出資料庫資料轉成JSON資料
Imports System
Imports System.Data
Imports System.Data.SqlClient
'Json.NET相關的命名空間
Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
Dim str_sql As String = Nothing
Dim p_value As String = Nothing
'假設要取得某一筆資料
str_sql = "Select test1,test2,test3 from test where test1=@test1 and test2=@test2"
'假設已經指定好參數,也就是sql指令的@test1,@test2,那就必須指定參數的值,如有多個參數值就已,號隔開
p_value = "台南市,某家商店"
'function queryDataTable(sql指令, 參數名稱, 參數值) 方法執行完會回傳DataTable
Dim dt As DataTable = queryDataTable(str_sql, "@test1,@test2", p_value)
Dim str_json As String = JsonConvert.SerializeObject(dt)
str_json = str_json.Replace(" ", "") '將空白取代掉
Response.Write("{" & Chr(34) & "test" & Chr(34) & ":" & str_json & "}")
End If
End Sub
Function queryDataTable(ByVal sql_str As String, ByVal pv As String, ByVal pv_value As String) As DataTable
Dim strsqlCon As String = "Server=127.0.0.1;Database=資料庫名稱;uid=帳號;pwd=密碼"
Dim sql_p() As String = Nothing
'可把split改成 Regex.Split,例如:Regex.Split("123<br/>456", "\<br\/\>") '\跳脫字元
sql_p = pv.Split(",") 'sql字串中的參數
Dim sqlvalue_p() As String = Nothing
sqlvalue_p = pv_value.Split(",") 'sql字串中的參數值
Dim ds As New DataSet()
Using conn As New SqlConnection(strsqlCon)
Dim command As SqlCommand = New SqlCommand(str_sql, conn)
Dim x_end As Integer = sql_p.Length - 1
For x As Integer = 0 To x_end
command.Parameters.AddWithValue(sql_p(x), sqlvalue_p(x)) '讓ADO.NET自行判斷型別轉換
Next
Dim da As New SqlDataAdapter()
da.SelectCommand = command
da.Fill(ds)
End Using
If ds.Tables.Count > 0 Then
Return ds.Tables(0)
Else
Return New DataTable()
End If
End Function
補充:
JSON資料轉成DataTable,並將資料傳給GridView1
'Label1.Text值 [{ "test1" : "台南市" , "test2" : "某家商店" },{ "test1" : "台南市" , "test2" : "某家商店1" },{ "test1" : "台南市" , "test2" : "某家商店2" }]
Dim str_data As String = Label1.Text.Replace(" ", "")
Dim dt As DataTable = JsonConvert.DeserializeObject(Of DataTable)(str_data)
GridView1.DataSource = dt
GridView1.DataBind()
以上 End
2013年9月24日 星期二
JavaScript replace 字數計算,取代空白、換行
前置作業:
請自行下載JQuery檔案以及建置好開發ASP的環境。
重點在於如何使用JavaScript來計算使用者在輸入文字時,如何計算字數。
紅色字為重點
<%@CODEPAGE="65001"%>
<%
'輸出設定成UTF-8'
Response.CodePage = 65001
Response.CharSet = "utf-8"
'在使用傳統ASP時,為了避免使用者按"上一頁"看到Client的暫存網頁,通常會加上下列這三行'
Response.CacheControl = "no-cache"
Response.AddHeader "Pragma", "no-cache"
Response.Expires = -1
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>無標題文件</title>
<script type="text/javascript" src="js/jquery-2.0.2.min.js"></script>
<script type="text/javascript">
var str_factor=/(\s)|(\n)/g;
$(document).ready(function(){
//運用JQuery為input id=TB1加入keyup事件
$('#TB1').keyup(function(){
var Word_Number;
var str_temp2 = $('#TB1').val(); //取得input id=TB1的值
if (str_temp2.replace(str_factor, "").length==0) {
$("#SSWl").html(''); //將 div id=SSWl 文字清空
}else{
Word_Number=(str_temp2.replace(str_factor, "")).length;
$("#SSWl").html('目前字數:'+Word_Number);
$('#showmsg').html($('#TB1').val());
}
});
});
function checkform(){
var str_temp = "";
if ($('#TB1').val() == '' || $.trim($('#TB1').val()).length - 1 == -1) {
alert('未填寫');
return false;
} else {
str_temp = $('#TB1').val();
if ((str_temp.replace(str_factor, "")).length < 10) {
alert('字數小於10個字,\n必須至少10個字');
return false;
}else if ((str_temp.replace(str_factor, "")).length > 10){
if ((str_temp.replace(str_factor, "")).length > 50){
alert('字數最多不能大於50個字');
return false;
}
}
}
window.document.f1.submit();
}
</script>
</head>
<body>
<%
TB1=Request.Form("TB1")
if NOT ISEmpty(TB1) then
Response.write "NOT Empty<br />"
str_temp=replace(TB1,vbcrlf,"" )
str_temp=replace(str_temp," ","" )
Response.write "長度="& len(str_temp) & ";" & str_temp ' 空白符號
else
Response.write "Empty"
end if
%>
<div id="SSWl"></div>
<form method="post" name="f1" id="f1" action="test_TextBox.asp" enctype="application/x-www-form-urlencoded">
<textarea name="TB1" id="TB1" style="width: 450px; height: 180px"></textarea>
<input type="submit" value="送出" onclick="javascript:checkform();"/>
</form>
<br />
<span id="showmsg">?</span>
</body>
</html>
請自行下載JQuery檔案以及建置好開發ASP的環境。
重點在於如何使用JavaScript來計算使用者在輸入文字時,如何計算字數。
紅色字為重點
<%@CODEPAGE="65001"%>
<%
'輸出設定成UTF-8'
Response.CodePage = 65001
Response.CharSet = "utf-8"
'在使用傳統ASP時,為了避免使用者按"上一頁"看到Client的暫存網頁,通常會加上下列這三行'
Response.CacheControl = "no-cache"
Response.AddHeader "Pragma", "no-cache"
Response.Expires = -1
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>無標題文件</title>
<script type="text/javascript" src="js/jquery-2.0.2.min.js"></script>
<script type="text/javascript">
var str_factor=/(\s)|(\n)/g;
$(document).ready(function(){
//運用JQuery為input id=TB1加入keyup事件
$('#TB1').keyup(function(){
var Word_Number;
var str_temp2 = $('#TB1').val(); //取得input id=TB1的值
if (str_temp2.replace(str_factor, "").length==0) {
$("#SSWl").html(''); //將 div id=SSWl 文字清空
}else{
Word_Number=(str_temp2.replace(str_factor, "")).length;
$("#SSWl").html('目前字數:'+Word_Number);
$('#showmsg').html($('#TB1').val());
}
});
});
function checkform(){
var str_temp = "";
if ($('#TB1').val() == '' || $.trim($('#TB1').val()).length - 1 == -1) {
alert('未填寫');
return false;
} else {
str_temp = $('#TB1').val();
if ((str_temp.replace(str_factor, "")).length < 10) {
alert('字數小於10個字,\n必須至少10個字');
return false;
}else if ((str_temp.replace(str_factor, "")).length > 10){
if ((str_temp.replace(str_factor, "")).length > 50){
alert('字數最多不能大於50個字');
return false;
}
}
}
window.document.f1.submit();
}
</script>
</head>
<body>
<%
TB1=Request.Form("TB1")
if NOT ISEmpty(TB1) then
Response.write "NOT Empty<br />"
str_temp=replace(TB1,vbcrlf,"" )
str_temp=replace(str_temp," ","" )
Response.write "長度="& len(str_temp) & ";" & str_temp ' 空白符號
else
Response.write "Empty"
end if
%>
<div id="SSWl"></div>
<form method="post" name="f1" id="f1" action="test_TextBox.asp" enctype="application/x-www-form-urlencoded">
<textarea name="TB1" id="TB1" style="width: 450px; height: 180px"></textarea>
<input type="submit" value="送出" onclick="javascript:checkform();"/>
</form>
<br />
<span id="showmsg">?</span>
</body>
</html>
JavaScript 顏色16進位轉RGB 或 RGB轉16進位
最近剛好碰到Html5的<input type="color"/>
當我選擇好顏色的時候,取到的值會是#ff0000,但有時開發人員會想取得RGB的值也就是RGB(255,255,255),您可以參考這篇資料 Convert rgb color to hex color
程式碼如下:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="Pragma" content="No-cache" />
<title>顏色16進位轉RGB 或 RGB轉16進位</title>
<script src="js/jquery-2.0.2.min.js"></script>
<script type="text/javascript">
//RGB轉16進位
function rgb2hex(rgb){
var hexDigits = new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f");
var hex = function(x){
return isNaN(x) ? "00" : hexDigits[(x - x % 16) / 16] + hexDigits[x % 16];
};
var tmp = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
var color = hex(tmp[1]) + hex(tmp[2]) + hex(tmp[3]);
return color;
}
//16進位轉RGB
function hex2rgb(v){
if (/^[0-9A-F]{3}$|^[0-9A-F]{6}$/.test(v.toUpperCase())) {
if (v.length == 3) {
v = v.match(/[0-9A-F]/g);
v = v[0] + v[0] + v[1] + v[1] + v[2] + v[2];
this.value = v;
}
var r = parseInt(v.substr(0, 2), 16);
var g = parseInt(v.substr(2, 2), 16);
var b = parseInt(v.substr(4, 2), 16);
return [r, g, b].join(',');
}
return v;
}
var hex,rgb;
//背景色
$('#BColor').change(function(){
hex=$('#BColor').val().replace('#', ''); //將#字號取代掉
rgb ='rgb('+hex2rgb(hex)+')';
alert(rgb);
});
</script>
</head>
<body>
Bg:<input type="color" id="BColor"/>
</body>
</html>
當我選擇好顏色的時候,取到的值會是#ff0000,但有時開發人員會想取得RGB的值也就是RGB(255,255,255),您可以參考這篇資料 Convert rgb color to hex color
程式碼如下:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="Pragma" content="No-cache" />
<title>顏色16進位轉RGB 或 RGB轉16進位</title>
<script src="js/jquery-2.0.2.min.js"></script>
<script type="text/javascript">
//RGB轉16進位
function rgb2hex(rgb){
var hexDigits = new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f");
var hex = function(x){
return isNaN(x) ? "00" : hexDigits[(x - x % 16) / 16] + hexDigits[x % 16];
};
var tmp = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
var color = hex(tmp[1]) + hex(tmp[2]) + hex(tmp[3]);
return color;
}
//16進位轉RGB
function hex2rgb(v){
if (/^[0-9A-F]{3}$|^[0-9A-F]{6}$/.test(v.toUpperCase())) {
if (v.length == 3) {
v = v.match(/[0-9A-F]/g);
v = v[0] + v[0] + v[1] + v[1] + v[2] + v[2];
this.value = v;
}
var r = parseInt(v.substr(0, 2), 16);
var g = parseInt(v.substr(2, 2), 16);
var b = parseInt(v.substr(4, 2), 16);
return [r, g, b].join(',');
}
return v;
}
var hex,rgb;
//背景色
$('#BColor').change(function(){
hex=$('#BColor').val().replace('#', ''); //將#字號取代掉
rgb ='rgb('+hex2rgb(hex)+')';
alert(rgb);
});
</script>
</head>
<body>
Bg:<input type="color" id="BColor"/>
</body>
</html>
訂閱:
文章 (Atom)