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


jsonp, jQuery & PHP to make cross-domain ajax call

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

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

php:

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

html:

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

代码的作用是:

从服务器a,为输入字段分配一个值"海景",将此表单提交给服务器B,并在h4标记中显示此值。

我不太清楚如何编写服务器端代码来输出值,尽管我已经找到了以下帖子。

这个和这个。

任何形式的帮助都将不胜感激。

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

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

实际上你离成功很近了。。。只要读一下这些要点。

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

格式为:

text/html
json
xml
......

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

  • 现在,当您在ajax函数中获得数据时,jQuery将使用success:function(response){}作为响应。所以变量响应将包含JSON。您可以使用jQuery选择器访问JSON并将数据放入任何标记中。$().html(response.)

这些东西可以在调试控制台的任何浏览器中进行分析。这就是请求和返回的内容。甚至您也可以在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代码。