Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jquery中的getJSON&;PHP中的json_编码&;标题_Php_Javascript_Jquery_Header_Jsonp - Fatal编程技术网

jquery中的getJSON&;PHP中的json_编码&;标题

jquery中的getJSON&;PHP中的json_编码&;标题,php,javascript,jquery,header,jsonp,Php,Javascript,Jquery,Header,Jsonp,我在一个单独的域中有这个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]

我在一个单独的域中有这个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);

?>
它不起作用。但是如果我像下面那样将URL更改为twitter,它就会工作

$.getJSON( 'http://search.twitter.com/search.json?q=dogs&callback=?', function( result ) {
       console.log(result);
});
据我所知,应该是
courses.php
文件。但我不知道如何解决这个问题


可能是什么问题?如何修复此问题?

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

因此,与其只是返回

{"bar": 42}
你必须回来

foo({"bar": 42});
在输出中包括函数名:

echo $_GET['callback'] . '(' . json_encode($array) . ');';
如果
$\u GET['callback']
不存在,您可能还希望使用一些合理的默认值,或者简单地返回JSON。如果您不需要或可以使用JSONP(例如,从另一个服务器端脚本调用URL),这非常有用



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

Twitter响应头是
Content-type-application/JSON;charset=utf-8
正如您所知,即使您解决了这个问题,Twitter随时都会关闭其API的这一部分,因为它已被弃用,这将不再有效。要使其正常工作,请访问下面的插件页面,并查看示例和安装说明(您必须修改示例PHP代码以使用搜索API,但除此之外,它是相同的):如果您可以解释更多,因为您的详细信息真的很有帮助。我应该解释更多什么?也许这会有帮助:。我的意思是,为什么我们要用结果来命名回调方法?因为JSONP就是这样“定义”的。这就是JSONP JSONP的本质。否则它就是JSON。
echo $_GET['callback'] . '(' . json_encode($array) . ');';