我在一个单独的域中有这个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
文件。但我不知道如何解决这个问题。
可能是什么问题?我该如何解决这个问题?
答案 0 :(得分: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数据类型)。 / p>