【问题标题】:getJSON in jquery & json_encode in PHP & headersjQuery 中的 getJSON 和 PHP 中的 json_encode 和标头
【发布时间】:2013-03-10 16:52:05
【问题描述】:

我在一个单独的域中有这个 php 文件(courses.php)。

<?php
header('content-type: application/javascript; charset=utf-8');

 $array = array();
 $array[0]["id"] = "1";
 $array[1]["id"] = "2";
 $array[2]["id"] = "3";

 $array[0]["coursename"] = "Course Name 1";
 $array[1]["coursename"] = "Course Name 2";
 $array[2]["coursename"] = "Course Name 3";


echo json_encode($array);

?>

我使用 JSONP 在 localhost 中访问如下数据。

$.getJSON( 'http://example.info/mobile/courses.php?callback=?', function( result ) {
       console.log(result);
});

它不起作用。但是,如果我将 URL 更改为 twitter,如下所示,它可以工作

$.getJSON( 'http://search.twitter.com/search.json?q=dogs&callback=?', function( result ) {
       console.log(result);
});

据我所知,它应该是courses.php 文件。但我不知道如何解决这个问题。

可能是什么问题?我该如何解决这个问题?

【问题讨论】:

  • Twitter 响应标头为 Content-Type application/json;charset=utf-8
  • 请注意,即使您解决了这个问题,Twitter 也会随时关闭其 API 的这一部分,因为它已被弃用,这将不再有效。要使其正常工作,请访问以下插件页面并查看示例和设置说明(您必须修改示例 PHP 代码以使用搜索 API,但除此之外,它是相同的):zkniebel.github.com/jquery-twitter-feed

标签: php javascript jquery header jsonp


【解决方案1】:

您的脚本返回的不是 JSONP,而是 JSON。 JSONP 的响应是一个带有一个函数调用的 JavaScript“文件”,其中函数名来自 callback 参数。

所以不要只是返回

{"bar": 42}

你必须回来

foo({"bar": 42});

在输出中包含函数名称:

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

如果$_GET['callback'] 不存在,您可能还想使用一些合理的默认值,或者直接返回 JSON。如果您不需要或可以使用 JSONP(例如,从另一个服务器端脚本调用 URL),这将非常有用。


注意:“JSONP”这个名称有点误导,因为该技术实际上与 JSON 没有任何关系。您生成的响应是纯 JavaScript 代码,您可以将任何内容传递给函数调用,它不必是 JSON 编码和作为对象解释的数据结构(它可以是任何有效的 JavaScript 数据类型)。

【讨论】:

  • 如果你能解释一下,因为你的细节真的很有帮助。
  • 我应该解释什么?也许这会有所帮助:en.wikipedia.org/wiki/JSONP.
  • 我的意思是我们为什么要在回调方法名称中加上结果?
  • 因为这就是 JSONP 的“定义”方式。这就是使 JSONP 成为 JSONP 的原因。否则它只是 JSON。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多