jsonp php写法,简单的jQuery,PHP和JSONP示例?

简单的jQuery,PHP和JSONP示例?

我面临着同源政策问题,通过研究该主题,我发现对我的特定项目而言,最好的方法是使用JSONP进行跨域请求。

我一直在阅读IBM的有关JSONP的这篇文章,但是我对所发生的事情并不十分了解。

我在这里只需要一个简单的jQuery> PHP JSONP请求(或任何术语即可;))-像这样(显然这是不正确的,只是为了让您了解我要实现的目标 :)):

jQuery的:

$.post('http://MySite.com/MyHandler.php',{firstname:'Jeff'},function(res){

alert('Your name is '+res);

});

PHP:

$fname = $_POST['firstname'];

if($fname=='Jeff')

{

echo 'Jeff Hansen';

}

?>

我将如何将其转换为正确的JSONP请求? 而且,如果我将HTML存储在要返回的结果中,那也行得通吗?

7个解决方案

89 votes

当您在外部域上使用$ .getJSON时,它会自动处理JSONP请求,例如,我在这里的tweet滑块

如果查看源代码,可以看到我正在使用.getJSON调用Twitter API。

因此,您的示例将是:经过测试和工作(您可以转到[http://smallcoders.com/javascriptdevenvironment.html]进行查看)

//JAVASCRIPT

$.getJSON('http://www.write-about-property.com/jsonp.php?callback=?','firstname=Jeff',function(res){

alert('Your name is '+res.fullname);

});

//SERVER SIDE

$fname = $_GET['firstname'];

if($fname=='Jeff')

{

//header("Content-Type: application/json");

echo $_GET['callback'] . '(' . "{'fullname' : 'Jeff Hansen'}" . ')';

}

?>

注意?callback =? 和+ res.fullname

Liam Bailey answered 2020-01-07T06:17:32Z

19 votes

首先,您无法使用JSONP发出POST请求。

基本上发生的是动态插入脚本标签来加载数据。 因此,仅GET请求是可能的。

此外,您的数据必须包装在一个回调函数中,在请求完成后将其加载以将数据加载到变量中。

整个过程由jQuery为您自动化。 但是,仅在外部域上使用$ .getJSON并不总是有效。 我可以凭个人经验说出来。

最好的办法是添加&callback =? 给你网址。

在服务器端,您必须确保将数据包装在此回调函数中。

即。

echo $_GET['callback'] . '(' . $data . ')';

编辑:

没有足够的代表来评论Liam的答案,因此这里的解决方案。

替换利亚姆的电话

echo "{'fullname' : 'Jeff Hansen'}";

echo $_GET['callback'] . '(' . "{'fullname' : 'Jeff Hansen'}" . ')';

Ewout Kleinsmann answered 2020-01-07T06:18:36Z

15 votes

更多建议

JavaScript:

$.ajax({

url: "http://FullUrl",

dataType: 'jsonp',

success: function (data) {

//Data from the server in the in the variable "data"

//In the form of an array

}

});

PHP回调:

$array = array(

'0' => array('fullName' => 'Meni Samet', 'fullAdress' => 'New York, NY'),

'1' => array('fullName' => 'Test 2', 'fullAdress' => 'Paris'),

);

if(isset ($_GET['callback']))

{

header("Content-Type: application/json");

echo $_GET['callback']."(".json_encode($array).")";

}

?>

Meni Samet answered 2020-01-07T06:19:04Z

7 votes

要使服务器使用有效的JSONP数组进行响应,请将JSON包装在括号2991740896428819456中,并在其前添加callback:

echo $_GET['callback']."([{'fullname' : 'Jeff Hansen'}])";

使用json_encode()会将原生PHP数组转换为JSON:

$array = array(

'fullname' => 'Jeff Hansen',

'address' => 'somewhere no.3'

);

echo $_GET['callback']."(".json_encode($array).")";

mckoch answered 2020-01-07T06:19:29Z

2 votes

下面是简单的jQuery,PHP和JSONP示例:

window.onload = function(){

$.ajax({

cache: false,

url: "https://jsonplaceholder.typicode.com/users/2",

dataType: 'jsonp',

type: 'GET',

success: function(data){

console.log('data', data)

},

error: function(data){

console.log(data);

}

});

};

Mayur S answered 2020-01-07T06:19:57Z

0 votes

$.ajax({

type: "GET",

url: '<?php echo Base_url("user/your function");?>',

data: {name: mail},

dataType: "jsonp",

jsonp: 'callback',

jsonpCallback: 'chekEmailTaken',

success: function(msg){

}

});

return true;

在控制器中:

public function ajax_checkjp(){

$checkType = $_GET['name'];

echo $_GET['callback']. '(' . json_encode($result) . ');';

}

user4000483 answered 2020-01-07T06:20:17Z

0 votes

用这个 ..

$str = rawurldecode($_SERVER['REQUEST_URI']);

$arr = explode("{",$str);

$arr1 = explode("}", $arr[1]);

$jsS = '{'.$arr1[0].'}';

$data = json_decode($jsS,true);

现在..

使用$data['elemname']访问值。

使用JSON对象发送jsonp请求。

要求格式:

$.ajax({

method : 'POST',

url : 'xxx.com',

data : JSONDataObj, //Use JSON.stringfy before sending data

dataType: 'jsonp',

contentType: 'application/json; charset=utf-8',

success : function(response){

console.log(response);

}

})

Atul Sharma answered 2020-01-07T06:20:54Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值