Разработка Web-приложений для iPhone
.pdf63(+$'
<table id="DeptsTab"> <tr><td></td></tr> </table>
</body>
</html>
+'*$'", 3-9. G"3 WEB #+)&1-C7 ,)-."/01-4
S*)&+-+0 %1-8&1-0 1& +&*.-C@ "+30."%, %#0 00 #"30)/&1-0 B")8-)@0+#4 #C01&)-08.
3.10.?%>%+,#
1)F".1"#+6= #$"8,"1@2+0 - "+.&36+0 ,)-."/01-0. '&(*0)-+0#6 % -#,".6(@087> ,0)080117>, B@1$C-4> - id.
2)H",-E-+0 $"3 +&$-8 "*)&("8, :+"*7 ,"#.0 1&/&+-4 $1",$- 1& #+)&1-C0 ,"4%.4.#4 #,-#"$ #"+)@31-$"% "+30.& # 8&$#-8&.61"2 (&),.&+"2. '0(@.6+&+ )&*"+7 <&E0?" ,)-."/01-4 3"./01 %7?.430+6 #.03@=D-8 "*)&("8 ('-#. 3.6)
)'*. 3.6. F)0"*)&("%&1172 %-3 #+)&1-C7
3)!"3-B-C-)@2+0 B&2. department.xml +&$-8 "*)&("8, :+"*7 )0(@.6+&+7 )&*"+7 ,)"?)&887 *7.- #.03@=D-8- ('-#. 2.7)
61
)'*. 3.7. !"3-B-C-)"%&1172 %-3 #+)&1-C7
'&(*0)-+0#6 #" #+)@$+@)"2 XML 3"$@801+&. !"3-B-C-)@2+0 #"30)/&1-0 3"$@801+&. V30#6 10 +)0*@0+#4 ,)"?)&88-)"%&1-0.
3.11. :/#)6/%.)&%+,# XML )67#24% & 04/)23 4#204%
A,"#"* ,)0"*)&("%&1-4 "*R0$+& % +0$#+"%72 XML 3"$@801+ "#1"%&1 1& ,"#.03"%&+0.61"8 ,)"#8"+)0 (1&:01-2 ,".02 "*R0$+& - ,"#.03@=D-8 B")8-)"%&1-- +0$#+"%7> #+)"$. H02#+%-4 3.4 :+-:1"?" B")8-)"%&1-4 3"$@801+& XML ,"$&(&17 % #.03@=D08 #C01&)--:
(L-#+-1? 3-10)
function describeContentAsXMLString(xmlObj){ //K.+-7."&-1'1"+3 -7R+83 1 3+843 XML (-8A?+)3"
var xml='<?xml version="1.0" encoding="utf-8" ?>\n';
var organization=xmlObj.getElementsByTagName("organization"); xml+='<organization name="'+organization[0].getAttribute("name")+'">\n'; xml+=organization[0].firstChild.data;
xml+='</organization>';
alert(xml);
}
+'*$'", 3-10. A"(3&1-0 +0$#+"%"?" XML 3"$@801+&
J081"?" ,)0"*)&("%&1172 $"3 ,"(%".40+ ,)"#8"+)0+6 XML 3"$@801+ ,"#.0 1&/&+-4 $1",$- showDoc. ('-#. 2.7). S*)&+-+0 %1-8&1-0, 3.4 %7%"3& 3"$@801+& % "$1" alert, -#,".6(@0+#4 $1",$& showDoc.
62
)'*. 3.8. !"3-B-C-)"%&1172 %-3 #+)&1-C7
3.12. 1)()*+,4# 4#204 @3+2A,,
H",".1-+0 +0$#+ B@1$C-- describeContentAsXMLString(xmlObj) +&$-8 "*)&("8,
:+"*7 ,"#.0 1&/&+-4 1& $1",$@ showDoc ,"$&(7%&."#6 %#0 #"30)/-8"0 XML 3"$@801+& (#8 )-#.), & 10 0?" :+6. F)-80)172 %-3 -1B")8&C--, %7%"3-8"2 % "$1" alert, ,"$&(&1" 1& )-#. 3-9.
)'*. 3.9. H",".1011"0 ,)-."/01-0
S+.&36+0 - ,)-."/01-0 ,".1"#+6=. A"*#+%011" 3"*&%.01-0 +0$#+& % #C01&)-2 ," "*R08@ 10 3"./1" ,)0%7E&+6 20-25 #+)"$.
3.13. B.$#+#+,# %4/,634)& , >%++'" & XML )67#24#
Q@1$C-4, +0$#+ $"+")"2 ,"$&(&1 1-/0 (L-#+-1? 3.11), -#,".6(@0+ (1&:01-4 ,".02 3.4
63
-(80101-4 &+)-*@+"% - 3&117> % XML "*R0$+0.
function setXMLFromFormFields(xmlObj){ //M(80140+ &+)-*@+7 - 3&1170 ," (1&:01-48 ,".02 B")8
var organization=xmlObj.getElementsByTagName("organization"); organization[0].setAttribute("name",
document.getElementById("orgName").value); organization[0].firstChild.data =
document.getElementById("myOrgComment").value;
}
+'*$'", 3-11. A"(3&1-0 +0$#+"%"?" XML 3"$@801+&
< 3"$@801+0 0#+6 3%& ,".4, $"+")70 8"/1" -#,".6("%&+6 3.4 )03&$+-)"%&1-4 3"$@801+&. ;1&."?-:178 "*)&("8 8"/1" %7,".1-+6 - 3)@?-0 -(80101-4. <-3 #+)&1-C7 ,"$&(&1 1-/0
)'*. 3.10. M(80101-0 XML 3"$@801+&
G&$ - )&100, 3.4 %7%"3& +0$#+& % "$1" alert -#,".6("%&. $1",$& showDoc.
3.14. C>%*#+,# %4/,634)& , 3.*)& XML )67#24%
H&.00 ,"$&(&17 80+"37, -#,".6(@0870 3.4 @3&.01-4 &+)-*@+"% - @(."%.
F@#+6, e - f – 10$"+")70 I.0801+7 3"$@801+&, 1&,)-80), ,".@:01170 #.03@=D-8 "*)&("8: var e=xmlObj.getElementsByTagName('department')[i];
var f=e. getElementsByTagName('employee')[j];
!0+"37 - %7,".140870 -8- 302#+%-4 @$&(&17 % +&*.-C0 1-/0
e.hasAttribute(attributeName) <"(%)&D&0+ true, 0#.- 0 -800+ &+)-*@+ # -80108 attributeName, false % ,)"+-%1"8 #.@:&0
e.hasAttributes() <"(%)&D&0+ true, 0#.- e -800+ &+)-*@+7, % ,)"+-%1"8 #.@:&0 false
64
e.hasChildNodes() |
<"(%)&D&0+ true, 0#.- e -800+ 3":0)1-0 @(.7, |
|
% ,)"+-%1"8 #.@:&0 false |
e.appendChild(node) |
H"*&%.40+ $ e @(0. node |
|
|
e.removeAttribute(attributeName) |
93&.40+ &+)-*@+ # (&3&1178 -80108 |
|
|
e.removeChild(f) |
93&.40+ @ @(.& e 3":0)1-2 @(0. f |
|
|
e.getAttributeNode(attributeName) |
V30#6 g= e.getAttributeNode('telno') ##7.$& 1& |
|
&+)-*@+ # (&3&1178 -80108 |
e.removeAttributeNode(attributeRef) |
e.removeAttributeNode(g) @3&.40+ &+)-*@+ |
|
@(.& e ," #7.$0 |
e.replaceChild(newChild,oldChild) |
V&80D&0+ #+&)72 3":0)1-2 @(0. (oldChild) |
|
1"%78 (newChild) |
3.16. B.$#+#+,# 04/3243/' XML )67#24%. D*)+,/)&%+,# E*#$#+4%
H"*&%.01-0 $ 3"$@801+@ "+30.&. < 3&11"8 ,)-80)0 1& "#1"%0 @(.&, #@D0#+%@=D0?" % 3"$@801+0, #"(3&0+#4 (-#,".6(@0+#4 ?.@*"$"0 $",-)"%&1-0) 1"%72 @(0., $"+")72 3"*&%.40+#4 ,"#.0 @(.& department, (&,-#&11"?" % 3"$@801+ ,"#.031-8. S*)&+-+0 %1-8&1-0 1& +"+ ,)-08, $"+")72 -#,".6("%&1 3.4 %$.=:01-4 @(.&, ,"#.0 ,"#.0310?" #@D0#+%@=D0?" (L-#+-1? 3-11)
function XMLAddDepartment(xmlObj)
{//,"."?+3. - XML object
var organization=xmlObj.getElementsByTagName("organization"); var dpt=organization[0].getElementsByTagName("department"); var lastDept=dpt[dpt.length-1];
var newDept=lastDept.cloneNode(true); newDept.setAttribute("title",
"New department, inserted after last one"); organization[0].insertBefore(newDept,lastDept.nextSibling); return xmlObj;
}
+'*$'", 3-11. A"(3&1-0 +0$#+"%"?" XML 3"$@801+&
F">"/-8 #,"#"*"8 8"/1" %$.=:-+6 % 3"$@801+ - @(0., 10 -80=D-2 &1&."?"% % 3"$@801+0. (G&$ #"(3&+6 1"%72 "*R0$+ XML -( #+)"$- +0$#+& c8. 3&.00)
3.17. B.$#+#+,# 04/3243/' XML )67#24%. !).>%+,# )67#24% ,. 04/)2, 4#204%
< XML "*R0$+ 8"/1" %$.=:-+6 3",".1-+0.6172 @(0., #"(3&% 0?" -( #+)"$- +0$#+&. A.03@=D-2 B)&?801+ $"3& -..=#+)-)@0+ I+@ %"(8"/1"#+6 (L-#+-1? 3.12)
function XMLAddDepartmentFromString(xmlObj)
{//,"."?+3. - XML object
var organization=xmlObj.getElementsByTagName("organization"); var dpt=organization[0].getElementsByTagName("department"); var lastDept=dpt[dpt.length-1];
var newDept=createXMLObjectFromString(sObj);
var d=newDept.getElementsByTagName("department")[0];
65
organization[0].insertBefore(d.cloneNode(true),
lastDept.nextSibling);
setOrgDataFromXMLObj(xmlObj); //K+.+A43")"1$01"+3 JS Objects
pageSetFormFieldsFromOrg();//K+.+.04-1'1"+3 43.")0>A return xmlObj;
}
var sObj="<department title='New department, created from string' telno='123-45-67'>\nB-43-03 0& 4-3.A()08-1 department2\n<employee name='B0(-.-1' salary='121' />\n<employee
name='=.+?0)' salary='72' />\n<employee name='P$@0)' salary='12' />\n</department>";
function createXMLObjectFromString(str){
str=window.prompt("S-.?" (-7"1$+)05 (+,".3"?+)3"",str); var parser=new DOMParser();
var xmlObj=
parser.parseFromString(str,"text/xml"); return xmlObj;
}
+'*$'", 3.12 A"(3&1-0 1"%"?" 30,&)+&801+&
Q@1$C-"1&.61"#+6, "*0#,0:-%&=D&4 #"(3&1-0 XML "*R0$+& -( #+)"$-, #"*)&1& % B@1$C-- createXMLObjectFromString(str). ;)?@801+ I+"2 B@1$C-- str I+" – +& #+)"$&, -( $"+")"2 #"(3&0+#4 "*R0$+ XML. P0 302#+%-4, $"+")70 10"*>"3-8" %7,".1-+6 (&3&=+#4
3%@84 #+)"$&8-. A+)"$&
var parser=new DOMParser();
#"(3&0+ 1"%72 "*R0$+ – parser.
Parser @800+ #"(3&%&+6 "*R0$+7 XML, I+" ,"$&(&1" % #+)"$0 xmlObj=parser.parseFromString(str,"text/xml");
H&.00 #"(3&1172 "*R0$+ 8"/1" %#+)&-%&+6 % #@D0#+%@=D-2 3"$@801+.
3.18. B+4#</%A,- 0 6%.%$, >%++'"
<I+"8 ,)-80)0 )#8&+)-%&0+#4 ,)-%"3-8&4 1& )-#. #>08& )&*"+7 ,)-."/01-4. < 1&:&.6172 8"801+ %)0801- (&?)@/011"0 ,)-."/01-0 ,)"%0)40+ 1&.-:-0 XML 3"$@801+& %
."$&.61"2 *&(0 3&117>. N#.- 3"$@801+ "*1&)@/01, +" 1& 0?" "#1"%0 #"(3&0+#4 XML "*R0$+, ,"#.0 :0?" B")8-)@0+#4 HTML #+)&1-C&. N#.- XML 3"$@801+& % ."$&.61"2 *&(0 10+, +" 3"$@801+ #:-+7%&0+#4 # #0)%0)&, & (&+08 1& 0?" "#1"%0 #"(3&0+#4 XML "*R0$+. F)-."/01-0 %7,".140+ 302#+%-4 1&3 "*R0$+"8 - #">)&140+ +)0*@0870 -(80101-4 % ."$&.61"2 *&(0 3&117> $&$ 1"%@= %0)#-= XML 3"$@801+&. F)- 10"*>"3-8"#+- "+)03&$+-)"%&11&4 %0)#-4 3"$@801+& % %-30 +0$#+"%"2 #+)"$- 8"/0+ *7+6 "+,)&%.01& 1& #0)%0).
<I+"8 ,)-80)0 +&$/0 ,"$&(7%&0+#4 #,"#"* #"(3&1-4 XML "*R0$+& -( +0$#+"%"2 #+)"$-.
66
)'*. 3.11 A>08& ,)-."/01-4, -#,".6(@=D0?" *&(7 3&117> - XML
>%?7'&;
H.4 )&*"+7 ,)-."/01-4 ,"1&3"*-+#4 03-1#+%011&4 +&*.-C& XMLDocs % I+"2 +&*.-C0 *@3@+ 3%& ,".4
o Versnum – 1"80) %0)#-- (+-, Integer, ,0)%-:172 $.=:, 8"/0+ B")8-)"%&+6#4 % )0/-80 autoincrement)
o Body – #"*#+%011" +0." XML 3"$@801+& (+-, BLOB)
Q@1$C--, "*0#,0:-%&=D-0 #"(3&1-0 - @1-:+"/01-0 +&*.-C, ,)-%03017 % .-#+-1?0 3.13
function dropTables(){ var db=systemDB;
if(window.confirm(":4+ 3"7$0>' 7"&' ("))'* 7A(A3 A("$+)'!")){ db.transaction(
function (transaction) {
transaction.executeSql('DROP TABLE XMLDocs;',[], nullDataHandler, killTransaction);
}
);
alert("done");
}
else alert("E+#4310+ -3?+)+)-");
}
function createTables(db)
{
/* : ;3-# <"430 4-&("2345 3"7$0>', +4$0 -)0 +J+ )+ 4-&(")' */
67
db.transaction(
function (transaction) {
transaction.executeSql('CREATE TABLE IF NOT EXISTS XMLDocs '+//T3-
&"8"&")-
'('+
'VERSNUM INTEGER PRIMARY KEY AUTOINCREMENT, BODY BLOB NOT NULL'+ ');',
[], nullDataHandler, killTransaction); transaction.executeSql('select count() as total from XMLDocs; ', [], reportSuccess, killTransaction);
}
);
}
+'*$'", 3.13 Q@1$C-- 3.4 #"(3&1-4 - @3&.01-4 +&*.-C7 XMLDocs
K#?%37."'. ' '2:."."'. 0#9/:."$% XML
H%0 "#1"%170 B@1$C-- 3.4 )&*"+7 # XML 3"$@801+"8 % 3&11"8 ,)-."/01--. F0)%&4 B@1$C-4 3"*&%.40+ 1"%72 XML 3"$@801+ $ *&(0 3&117>, %+")&4 -(80140+ 3"$@801+, -80=D-2 ,"#.031== %0)#-=. P&$"2 ,"3>"3 ,"(%".40+ ,)"308"1#+)-)"%&+6 %#0 ,)-087 )&*"+7 # *&(&8- 3&117> - XML 3"$@801+&8-, 1" 10 @#."/140+ ."?-$@ (& #:0+ -#,".6("%&1-4 10#@D0#+%0117> 30+&.02.
K+- B@1$C-- ,"$&(&17 % .-#+-1?0 3.14.
//
function insertXMLData(db)
{
/* C")+4+)0+ &",040 */ db.transaction(
function (transaction) {
transaction.executeSql('INSERT into XMLDocs (BODY) VALUES (?); ', [describeContentAsXMLString(myResponseXML)], nullDataHandler,
killTransaction);
}
);
}
function updateLastXMLRecord(db)
{
/* 67)-1$+)0+ &",040 */ db.transaction(
function (transaction) {
transaction.executeSql('UPDATE XMLDocs SET BODY= ? WHERE VERSNUM=(SELECT max(VERSNUM) from XMLDocs); ',
[describeContentAsXMLString(picturesXML)], nullDataHandler, killTransaction);
}
);
68
}
L-#+-1? 3.14. H"*&%.01-0 - "*1"%.01-0 XML 3"$@801+"% % *&(0 3&117>
S*)&+-+0 %1-8&1-0 1& #,"#"*7 -#,".6("%&1-4 *."$& ,"3#+&1"%$-. '&(.-:170 B@1$C-- "*0#,0:-%&=+ )&(170 80+"37 B")8-)"%&1-4 +0$#+"%"?" XML 3"$@801+&.
E;?#49% '2 ?%2; 0%"";@ XML 0#9/:."$%
< )#8&+)-%&08"8 ,)-."/01-- # C0.6= @,)"D01-4 %#0?3& %7*-)&0+#4 #&8&4 ,"#.03144 %0)#-4 3"$@801+&, 00 1"80) ",)030.40+#4 c ,"8"D6= ",0)&+")& SQL
SELECT max(VERSNUM) from XMLDocs
H&.00 "+"*)&/&0+#4 -8011" I+& %0)#-4. L-#+-1? 3.15 ,"$&(7%&0+ I+@ B@1$C-= #C01&)-4.
function getXMLFromDB(db)
{
/* : ;3-# <"430 (-8A?+)3 1'70."+345 0& 7"&' */
db.transaction(
function (transaction) {
transaction.executeSql('select BODY from XMLDocs where versnum=(SELECT max(VERSNUM) from XMLDocs );',
[], showYourBody, killTransaction);
}
);
}
+'*$'", 3.15. F".@:01-0 +0$#+"%"?" XML 3"$@801++& -( *&(7 3&117>
F"#.0 %7*")$- 3"$@801+& -( *&(7 0?" 10"*>"3-8" ,)0"*)&("%&+6 % XML "*R0$+ I+" 30.&0+ B@1$C-4 showYourBody().
C#20%"'. 0#9/:."$% '2 *$4#9' $.9*$%
Q@1$C-4 showYourBody() -#,".6(@0+ )#8"+)01170 )&100 ,)-087 3.4 B")8-)"%&1-4 XML "*R0$+& -( #+)"$- +0$#+&. L-#+-1? 3.16. ,"$&(7%&0+ I+@ B@1$C-=.
function showYourBody(transaction,results){ var parser=new DOMParser();
responseXML=
parser.parseFromString(results.rows.item(0)['BODY'],
"text/xml");
setFormFieldsFromXML(responseXML);
return;
}
+'*$'", 3.16. F)0"*)&("%&1-0 #+)"$- +0$#+& % XML 3"$@801+
F"#.0 #"(3&1-4 XML "*R0$+& -( #:-+&11"?" -( *&(7 3&117> +0$#+&, ,".4 JP!H #+)&1-C7 @#+&1&%.-%&=+#4 B@1$C-02
setFormFieldsFromXML(responseXML)
K+& B@1$C-4 @#+&1&%.-%&0+ #:-+&1170 (1&:01-4 % ,".4, 3",@#$&=D-0 )03&$+-)"%&1-0.
69
-%1%78"%( =4#3.49% ?%2; 0%"";@
J&:&.61&4 ,)"%0)$& %7,".140+#4 ,"#.0 (&?)@($- HTML #+)&1-C7. N0 10"*>"3-8"#+6 #%4(&1&
# ,)"#+78 @#."%-08 )&*"+7 ,)-."/01-4, 0#.- *&(& 3&117> ,@#+&, +" 3"$@801+ #:-+7%&0+#4 # #0)%0)&. N#.- % *&(0 3&117> -800+#4 3"$@801+, +" %7*")$& "#@D0#+%.40+#4 -( ."$&.61"2 *&(7 3&117>.
F)"%0)$& 1&.-:-4 3"$@801+& % *&(0 %7,".140+#4 +&$ ():
//P& 7"&' ("))'* 4<03'1"+345 -7J++ <04$- 1+.40# (-8A?+)3" function startUp(db)
{
/* K.-1+.8" )"$0<05 (-8A?+)3-1 */ db.transaction(
function (transaction) {
transaction.executeSql('select count() as total from XMLDocs; ', [], checkRecords, killTransaction);
}
)
}
function checkRecords(transaction,results){
var total=parseInt(results.rows.item(0)['total']); if(total>0) {
//E"))'+ &"3.+7-1")' 0& %E getXMLFromDB(systemDB); return;
}
//E"))'+ &"3.+7-1")' 0& 043-<)08" XML requestContent();
return;
}
+'*$'", 3.17. F)"%0)$& #@D0#+%"%&1-4 3"$@801+& % *&(0
<#0 10"*>"3-870 3.4 B@1$C-"1-)"%&1-4 B@1$C-- #"#+&%.017. '&100 )&(*-)&.-#6 B@1$C--, ,"(%".4=D-0 (1&:-+0.61" )E-)-+6 %"(8"/1"#+- ,)-."/01-4.
3.19. ?%>%+,- >*- 0%$)04)-4#*8+); (/)/%6)42,
J&,-#&+6 HTML $"3 - Javascript #C01&)-2 3.4 )0E01-4 #.03@=D-> (&3&:
1.< *.&1$&> (&$&("% "+"*)&/&0+#4 -1B")8&C-4 " 1"80)0 (&$&(& (orderId), -801- (&$&(:-$& (name) - #@88&)1"2 #+"-8"#+- (&$&(&. A"(3&+6 XML 3"$@801+, #"30)/&D-2 2-3 (&,-#- *.&1$&. <7*)&+6 -( 3"$@801+& - ,)-%0#+- 1& WEB #+)&1-C0 3&1170 "* -801- (&$&(:-$& - #@88&)1"2 #@880 (&$&("% 1& 8-1-8&.61@= - 8&$#-8&.61@= #@88@.
2.< %03"8"#+4> ," (&),.&+0 #"+)@31-$"% "+30."% "+"*)&/&0+#4 -1B")8&C-4 " 1&(%&1-- "+30.& (Title), -801- #"+)@31-$& (name) - 0?" (&),.&+0 (salary). A"(3&+6 XML 3"$@801+, #"30)/&D-2 (&,-#- " 2-3> "+30.&>. <7*)&+6 -( 3"$@801+& - ,)-%0#+- 1& WEB #+)&1-C0 3&1170 " #"+)@31-$&> "+30.& # 8&$#-8&.61"2 #@88&)1"2 (&),.&+"2
(salary).
3.< #,-#$&> ")?&1-(&C-- ,)-%03017 3&1170 "* "+30.&> - #"+)@31-$&> (1&(%&1-0 "+30.&, +0.0B"1 "+30.&, B&8-.-- - (&),.&+7 #"+)@31-$"%). A"(3&+6 XML 3"$@801+,
70