简单的jQuery,PHP和JSONP示例?

2022-08-30 10:02:16

我面临着同源策略问题,通过研究这个主题,我发现我的特定项目的最佳方法是使用JSONP进行跨源请求。

我一直在阅读IBM关于JSONP的这篇文章,但是我并不是100%清楚发生了什么。

我在这里所要求的只是一个简单的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,那是否也有效?


答案 1

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

如果你看一下源代码,你可以看到我正在使用.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
  <?php
 $fname = $_GET['firstname'];
      if($fname=='Jeff')
      {
          //header("Content-Type: application/json");
         echo $_GET['callback'] . '(' . "{'fullname' : 'Jeff Hansen'}" . ')';

      }
?>

请注意 ?回调=?和 +res.fullname


答案 2

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

基本上发生的事情是动态插入脚本标记以加载数据。因此,只有 GET 请求是可能的。

此外,您的数据必须包装在回调函数中,该回调函数在请求完成后调用以加载变量中的数据。

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

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

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

即。

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

编辑:

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

更换利亚姆的台词

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

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

推荐