jsonp,jQuery& PHP进行跨域ajax调用

时间:2013-07-29 08:54:48

标签: php ajax cross-domain

  1. http://serverA.com/list.php
  2. HTML:

    <form id="myform">
       <input id="inputfield" name="view">
    </form>
    

    JS:

    var inputdata = $('#inputfield').val('ocean-view');
    
    $('#myform').submit(function(e) {
        e.preventDefault();
    
        $.ajax({
           type: 'GET',
           url: 'http://serverB.com/detail.php',
           data: inputdata,
           dataType: 'jsonp'
        });
    });
    
    1. http://serverB.com/detail.php
    2. PHP:

      <?php
          $view = $_GET['callback'].'('.json_encode(name) .')';
      ?>
      

      HTML:

      <h4><?php echo $view; ?></h4>
      

      代码的作用是:

      从serverA

      ,将值“ocean-view”分配给输入字段,将此表单提交给serverB,并在h4标记中显示该值。

      我无法弄清楚如何编写服务器端代码来输出值,即使我找到了以下帖子。

      thisthis

      感谢任何形式的帮助。

      更新 我使用YQL来帮助查看jsonp回调响应,这里是json结构:

      callback({
        "query": {
          "count": 1,
          "created": "2013-07-29T13:01:12Z",
          "lang": "en-US",
          "results": {
             "h3": {
               "class": "mytitle",
               "content": "Example"
             }
          }
        }
      });
      

1 个答案:

答案 0 :(得分:2)

实际上你非常接近成功......只需阅读这些要点。

  • 每当您发出ajax请求时,浏览器都会在ajax URL上发送一个带有相应参数和详细信息的命中。在尊重的URL上执行PHP代码。它可以以某种格式返回数据。它不能直接返回PHP变量中的数据。

格式为:

text/html
json
xml
......

主要针对跨域请求,我们使用JSONP。 这意味着PHP脚本将以JSON格式返回数据。 所以你只需直接回复你的json_encode脚本。那将是你的ajax请求的响应。

  • 现在当你在ajax函数中获得数据时,jQuery使用成功:function(response){}你的响应会来。 所以变量响应将包含JSON。 您可以使用jQuery选择器访问JSON并将数据放入任何标记中。 $()HTML(响应。);

可以在调试控制台的任何浏览器中分析这些内容。请求的内容和返回的内容。 即使你可以在Mozilla中使用Firebug来检查ajax请求。

所以你会做三个改变。

在Ajax函数中写一个成功函数:

var inputdata = $('#inputfield').val('ocean-view');

$('#myform').submit(function(e) {
e.preventDefault();

$.ajax({
   type: 'GET',
   url: 'http://serverB.com/detail.php',
   data: "inputdata="+inputdata,
   dataType: 'jsonp',
success:function(response){
// response will be json type so access it 
// print ur json in html tag like resposne is {"data":23}
$(<jquery selector>).html(reponse.data);
}
});

});

<?php
// echo this 
$inputdata = $_GET['inputdata'];
// perform you logic , 

// make an array to encode it in json
echo  $_GET['callback'].'('.json_encode($responseArr) .')';
?>

并从h4标记中删除PHP代码。