我在制作jsonp请求时没有遇到任何问题,但是我不确定如何设置一个Web服务来在jsonp中提供响应.
首先,是否需要以某种方式配置服务器以允许jsonp请求,或者页面是否必须正确格式化响应?
在我的测试中,我从geonames.org获得了以下jsonp响应(我在服务器/域1上放置了一个空白页面,没有别的):
PHP echo $_GET['callback'];?>({"postalcodes":[{"adminName2":"Westchester","adminCode2":"119","postalcode":"10504","adminCode1":"NY","countryCode":"US","lng":-73.700942,"placeName":"Armonk","lat":41.136002,"adminName1":"New York"}]});
在服务器/域2上,我发出以下请求:
$.ajax({
// works when I make the call to geonames.org instead of domain1
//url: 'http://www.geonames.org/postalCodeLookupJSON?postalcode=10504&country=US&callback=?',url: 'http://www.domain1.com/test/jsonp.PHP?callback=?',success: function(data) {
$('#test').html(data);
},});
将文件放在同一服务器(域1或2)上并将其转换为常规json请求时,调用有效.我究竟做错了什么?
只是为了澄清:我的问题与收到请求的页面有关.当我将它发送到geonames.org,flickr等时,我知道请求有效… apis.但是,我正在尝试设置一个页面来发送响应.在我的例子中,我只有一个带有硬编码jsonp的空白页面.我不确定我是否必须在页面上有其他标题或在我的服务器上启用了某些功能.
如果您有以下网址:
http://www.mydomain.com/test/jsonp.PHP\u0026amp;callback=? jQuery将用唯一的字符串替换url末尾的问号.在服务器端,您必须使用此字符串($_ GET [‘callback’])并在响应中将其用作函数名:
PHP-例如:
PHP
$object=array('postalcodes'
=>array(
array(
"adminName2" => "Westchester","adminCode2" => "119","postalcode" => "10504","adminCode1" => "NY","countryCode" => "US","lng" => -73.700942,"placeName" => "Armonk","lat" => 41.136002,"adminName1" => "New York"
)));
echo $_GET['callback'].'('.json_encode($object).')';
?>
接收时响应会发生什么? jQuery知道唯一的字符串(假设fx123456).
jQuery将使用src创建一个< script> -element:http://www.mydomain.com/test/jsonp.PHP\u0026amp;callback=fx123456. jQuery将调用一个名为fx123456()的动态创建函数.此函数将返回JSON(作为对象),该JSON将被视为$.ajax()的成功函数的数据参数.
因此,如果你不使用jQuery提供的callback-parameter作为响应中的函数名,jQuery不知道要调用的函数的名称(我更好地说jQuery将调用一个不存在的函数).