ajax跨域jsonp,后端用php

发表于 php 分类,标签:

html


<!DOCTYPE HTML>

<html>

<head>

<meta charset="UTF-8">

<title></title>

<link rel="stylesheet" type="text/css" href="css/common.css" media="all" />

</head>

<body>

<h1>ajax跨域加载</h1>

<ul>


</ul>

<button>click</button>

<script type="text/javascript" src="js/jQuery.v1.11.1.min.js"></script>

<script type="text/javascript" src="js/demo2.js"></script>

</body>

</html>

js:

var  url='http://127.0.0.1/ajaxCrossDomain/php/jsonp.php';




//  跨域请求

 $('button').on('click',function(){

$.ajax({

method  :'get', //POST", "GET ", "PUT"   1.9版本之前应该用 type

url :url,

dataType:'jsonp',//text, html, xml, json,jsonp,和 script.

cache :true,

async :true,

data:'data',

jsonp: 'callback',

jsonpCallback: 'flightHandler',

password:'ued',

username:'ued',

contentType :"application/x-www-form-urlencoded; charset=UTF-8",  //application/x-www-form-urlencoded, multipart/form-data,text/plain

timeout:2000,

beforeSend :function(){

},

success:function(data, textStatus, jqXHR){

$.each(data,function(name,value){

$('<li>'+name+':'+value+'</li>').appendTo('.js-ul-list');

});

},

error:function(data, textStatus, jqXHR){

},

complete :function(data, textStatus, jqXHR){

}

}).done(function(data, textStatus, jqXHR){  //  replace  .success()

console.log("success")

}).fail(function(jqXHR, textStatus, errorThrown) { //  replace  .error()

console.log("error")

}).always(function(data, textStatus, jqXHR) {  //  replace .complete()

console.log("complete"); 

}).then(function(data, textStatus, jqXHR) {   //  .done() 和 .fail()

}, function(jqXHR, textStatus, errorThrown) {

});

}); 



php:

<?php


// 获取callback

 $callback = $_GET["callback"];

 //  json 路径

 $filename = "../json/data.json";

 // 获取内容file_get_contents();

      $json_string = file_get_contents($filename);

 //  json_decode() 转换为对象stdClass, 第二个参数为true 转化成 array    

 $result= json_decode($json_string,true);

 // 给数组增加一个参数 $callback

 $result['callback']=$callback;

 

 //  变成json 个数数据

  $result = json_encode($result);

 //  三种输入形式

 //echo $callback.'('.$result.')'; (一)

 //echo "flightHandler($result)"; (二)

  echo "$callback($result)"; // (三)


 

?>



JSONP原理优缺点(只能GET不支持POST)

dataType : "jsonp",  //  指定类型
jsonp: "callback", //  回调函数的接收    callback= jsonpCallback &
jsonpCallback:"jsonpCallback"  //  回调函数的名称



0 篇评论

发表我的评论