一种叫JSON with Padding的技术,简称 JSONP.(原理参考http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/),应用JSONP可以实现JSON数据的跨域调用。非常的幸运,JQuery1.2以后支持JSONP的应用。下面侧重说明在JQuery中,Json的跨域调用。

    应用JSONP实现Json数据跨域调用,需要服务器端与客户端的合作完成。引用Jquery官方的例子,客户端掉用如下:



[javascript]

  1. $.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?", function(data) {  

  2.     $.each(data.items, function(i, item) {  

  3.         $("<img/>").attr("src", item.media.m).appendTo("#images");  

  4.         if (i == 3)  

  5.             return false;  

  6.     });  

  7. });  


    注意这里调用的地址中jsoncallback=?是关键的所在!其中,符号会被Query自动替换成其他的回调方法的名称,具体过程和原理我们这里不理会。我们关心的是jsoncallback=?起什么作用了?原来jsoncallback=?被替换后,会把方法名称传给服务器。我们在服务器端要做什么工作呢?服务器要接受参数jsoncallback,然后把jsoncallback的值作为JSON数据方法名称返回,比如服务器是JSP,我们会这样做:



[java] 

  1. ...  

  2. String jsoncallback=request.getParameter("jsoncallback");  

  3. ...  

  4. out.print(jsoncallback+"({\"account\":\"XX\",\"passed\":\"true\",\"error\":\"null\"})");  


  Jquery取得的数据可能如下:



[plain]

  1. JQUET0988788({"account":"XX","passed":"true","error":"null"})  


    总结,用JSONP要做两件事:
      1. 请求地址加参数:jsoncallback=?
      2. 服务器段把jsoncallback的值作为方法名传回来,如JQUET098788(...)

另一种
一、直接引入javascript
<script>
document.getElementByI d("test").onclick = function(){ var js = document_createElemen t("script"); js.src = "http://www.zhangsuoyong.com/demo/cross/ajax01/1.php"; document.body.a(js); }
</script>

1.php
<?php
echo "alert(1)";
?>