【问题标题】:jsonp, jQuery & PHP to make cross-domain ajax calljsonp, jQuery & PHP 进行跨域ajax调用
【发布时间】:2013-07-28 23:46:03
【问题描述】:
  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>

代码的作用是:

从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"
       }
    }
  }
});

【问题讨论】:

  • ajax 请求返回什么?

标签: php ajax cross-domain


【解决方案1】:

其实你已经很接近成功了……看看这些吧。

  • 每当您发出 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(响应。);

这些东西可以在任何浏览器的调试控制台中进行分析。即请求什么,返回什么。 甚至你可以在 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 代码。

【讨论】:

  • 我听从了您的建议并更新了回调响应,请参阅帖子。我改变了ajax成功:function(data){ $(body).html(data.query.results);});现在我仍然不明白 json_encode() 中的变量 $responseArr 是如何创建的。根据我在更新中提供的回调响应,我是否需要更改变量名或者它可以是任何东西?当我进行测试时,我保留了 $responseArr 原样,我的结果返回“(null)”。
  • 任意数组。 b/c json_encode 函数将数组作为参数。让你想发送一个结果,如 "query": { "count": 1, "created": "2013-07-29T13:01:12Z", "lang": "en-US", "results": { " h3": { "class": "mytitle", "content": "Example" } } } } 那么你需要创建一个像 $responseArr = array("query"=>array("count"=>1, "created"=>"2003-07-29T13:01:122","lang"=>"en-US","re​​sults"=>array("h3"=>array("class"=>"mytitle" ,"内容"=>"示例"))));回声 json_encode($responseArr); $responseArr 并不特别。
  • 我想我明白你想说什么。但是,按照上面的示例,我设置了 $responseArr = array(1,2,3) & 我回显了 &_GET['inputdata'] 以及回调值。我通过键入“serverB.com/detail.php&inputdata=ocean-view&callback=?”测试了远程站点。好吧,结果显示为“([1,2,3])”,但我真的需要“海洋视图”来显示!这就是我希望它从远程服务器回显到浏览器的全部意义。
  • 对于“海景”,检查服务器如何在直接命中(页面重新加载时)和浏览器发送的异步请求(ajax)中与浏览器通信。你可以问另一个问题,我将解释它是如何执行的。 b/c 它本身就是一个话题。所以首先关闭这个问题并在评论中输入一个指向你的新问题的链接。
猜你喜欢
  • 2012-01-11
  • 2012-07-29
  • 2013-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-30
  • 2014-01-25
相关资源
最近更新 更多