据我所知,您的服务器不支持 JSONP 的请求。比如
var getUrl = 'http://webapp.armadealo.com/home.json';
$.ajax({
url : getUrl,
type : 'GET',
dataType : 'jsonp text',
jsonp: 'jsonp',
crossDomain : true,
success: function() { console.log('Success!'); },
error: function() { console.log('Uh Oh!'); },
});
这会说SyntaxError: invalid label。您所拥有的返回的 JSONP 格式不正确。它必须被包装为 JSONP,因为 jQuery 需要它。
所以你得到的结果是正确的,但这不是你需要的。 JSONP 调用所需的内容如下所示:
functionName({
"mall": {
"name": "South Shore Plaza",
"city": "Braintree",
"directory": "/assets/directory/0000/0094/show_floorplan.aspx",
"postal_code": "02184",
"street": "250 Granite St",
"lng": -71.023692,
"id": 147,
"phone": "(781) 843-8200",
"lat": 42.218688,
"state": "MA"
}
});
...由于当前返回的不是有效的 JavaScript(它本身就是这样),这就是 JSONP 的工作方式,因此响应实际上需要是可执行的 JavaScript。
您只需将该代码直接放入页面中的<script> 块中即可得到相同的错误。
如果您只是在嵌入一段数据,我推荐使用像 jQuery-oembed 这样的插件来执行此操作。如果您需要数据,则需要在您的服务器上处理 JSON,然后从您的服务器获取数据。
例如
假设我们想使用 jQuery 创建一个跨域。下面是 jQuery $.ajax 调用的样子:
$.ajax({
dataType: 'jsonp',
data: 'id=test',
jsonp: 'jsonp_callback',
url: 'http://www.differentdomain.com/get_data.php',
success: function () {
// do something
},
});
现在在服务器端(在 get_data.php 文件中),我们必须获取回调名称并以 JSON 格式发送包含在回调函数中的数据。
像这样的:
<?php
$jsonp_callback = $_GET['jsonp_callback'];
$data = array('1','2','3');
echo $jsonp_callback . '('.json_encode($data).');';
?>
只有当服务器正确地将响应嵌入到 JavaScript 函数调用中时,才能使用 JSONP。