20151111,
解决方法一、利用带有SRC的标签进行请求。
src是可以请求外部资源的一种属性,恰好<script>标签含有该属性,
假设有含有以下代码的一个jsonp.php文件:
<? php
$jason_array=Array("FlightNo"=>"CA111","FlightFrom"=>"北京","FlightTo"=>"上海");
echo jason_encode($jason_array);
?>
因为每次请求都会有一个Response Headers,因为利用了<script>标签,所以在以上代码中加入一段话更改响应头,
让内容作为javascript响应输出:
<? php
header("content-type:text/javascript");
$jason_array=Array("FlightNo"=>"CA111","FlightFrom"=>"北京","FlightTo"=>"上海");</span>
echo "callBackFlight(
$jason_array
)";
?> 同时在原html中引入下面两段代码:
function callBackFlight(data){
console.log(data.FlightNo);
console.log(data.FlightNo);
console.log(data.FlightNo);
}
<pre name="code" class="html">$(function(){
$("btn").click(function(){
//1.生成一个script标签
var script=$('<script>');
//2.指定script属性
script.attr("type","text/javascript");
script.attr("src","http://xxx/jasonp.php");
//3.将生成的标签添加到head中
$("head").append(script);
})
});
特别要注意的是第一个函数必须写在第二个之前。
</pre><h2><span style="background-color:rgb(255,255,255)">方法二,用ajax的方法来解决</span></h2><pre name="code" class="html"></pre><pre name="code" class="html">
</pre>
<?php
//更改响应消息头,让内容作为javascript响应输出
header("content-type:text/javascript");
$callback=$_REQUEST["callback"];
$array = Array("FlightNO"=>"CA1111","FlightFrom"=>"北京","FlightTo"=>"上海");
$json_array = json_encode($array); //相当于 callBackFlight 的参数值
echo "$callback($json_array)";
?>
下面用jQuery的Ajax来写。
$(function(){
$("#btn").click(funcion(){
$.ajax(url:"http://xxxx/jasonp.php",
type:"get",
dataType:"jasonp",
jasonp:"callBack"
,success:function(data){
console.log(data.FlightNo);}
//success可以用jsonpCallback:"getFlight"取代
});});});
未完待续。。。