hgz123 发表于 2013-1-23 03:00:52

ajax中采用了“沙箱”机制

欢迎访问: www.ptcms.cn
 
 
Ajax 采用一种沙箱安全模型。因此,Ajax 代码(具体来说就是 XMLHttpRequest 对象)只能对所在的同一个域发送请求。以后的文章中将进一步介绍安全和 Ajax,现在只要知道在本地机器上运行的代码只能对本地机器上的服务器端脚本发送请求。如果让 Ajax 代码在 www.breakneckpizza.com 上运行,则必须 www.breakneck.com 中运行的脚本发送请求。
清单 7. 建立请求 URL
<script language="javascript" type="text/javascript">   var request = false;   try {   request = new XMLHttpRequest();   } catch (trymicrosoft) {   try {       request = new ActiveXObject("Msxml2.XMLHTTP");   } catch (othermicrosoft) {       try {         request = new ActiveXObject("Microsoft.XMLHTTP");       } catch (failed) {         request = false;       }       }   }   if (!request)   alert("Error initializing XMLHttpRequest!");   function getCustomerInfo() {   var phone = document.getElementById("phone").value;   var url = "/cgi-local/lookupCustomer.php?phone=" + escape(phone);   }</script> 
这里没有难懂的地方。首先,代码创建了一个新变量 phone,并把 ID 为 “phone” 的表单字段的值赋给它。清单 8 展示了这个表单的 XHTML,其中可以看到 phone 字段及其 id 属性。

清单 8. Break Neck Pizza 表单
<body><p><img src="breakneck-logo_4c.gif" alt="Break Neck Pizza" /></p><form action="POST">   <p>Enter your phone number:    <input type="text" size="14" name="phone" id="phone"            onChange="getCustomerInfo();" />   </p>   <p>Your order will be delivered to:</p>   <div id="address"></div>   <p>Type your order in here:</p>   <p><textarea name="order" rows="6" cols="50" id="order"></textarea></p>   <p><input type="submit" value="Order Pizza" id="submit" /></p></form> </body> 
还要注意,当用户输入电话号码或者改变电话号码时,将触发 清单 8 所示的 getCustomerInfo() 方法。该方法取得电话号码并构造存储在 url 变量中的 URL 字符串。记住,由于 Ajax 代码是沙箱型的,因而只能连接到同一个域,实际上 URL 中不需要域名。该例中的脚本名为 /cgi-local/lookupCustomer.php。最后,电话号码作为 GET 参数附加到该脚本中:"phone=" + escape(phone)。
如果以前没用见过 escape() 方法,它用于转义不能用明文正确发送的任何字符。比如,电话号码中的空格将被转换成字符 %20,从而能够在 URL 中传递这些字符。
可以根据需要添加任意多个参数。比如,如果需要增加另一个参数,只需要将其附加到 URL 中并用 “与”(&)字符分开 [第一个参数用问号(?)和脚本名分开]。
页: [1]
查看完整版本: ajax中采用了“沙箱”机制