我正在编写应用程序,我需要从另一台服务器访问客户端的一些json数据。由于跨域问题,我计划使用jsonp。 jQuery允许我使用$ .getJSON()方法执行此操作,但是,我无法判断方法是否失败(即服务器没有响应或其他内容)。所以我尝试使用$ .ajax来获取JSON数据。但它不起作用,我不知道该尝试什么。 这是一个显示我的问题的例子:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>TEST</title>
<script type="text/javascript" src="scripts/jquery-1.5.1.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#button_detect').click(function(){
var feedApiAjax = 'http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&q=';
var feedApiGetJSON = 'http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&callback=?&q=';
var feedUrl = 'http://www.engadget.com/rss.xml';
$.ajax({
url: feedApiAjax + feedUrl,
datatype: 'jsonp',
success: function(data) {
console.log('$.ajax() success');
},
error: function(xhr, testStatus, error) {
console.log('$.ajax() error');
}
});
$.getJSON(
feedApiGetJSON + feedUrl,
function(data) {
console.log('$.getJSON success');
});
});
});
</script>
</head>
<body>
<div id="button_detect">CLICK ME!!!!</div>
</body>
如果您创建一个包含此代码的网页并单击“Click Me”div,您将看到$ .getJSON请求正在运行而$ .Ajax请求不正常。我已经尝试过/删除“callback =?” tg,使用了“jsonp”和“json”数据类型,但没有这个。
关于我可能做错什么的任何想法?
干杯!
答案 0 :(得分:7)
当dataType为jsonp时,jquery不会自动触发错误函数。这在“错误”选项下的文档中进行了描述:
注意:不会为跨域脚本和JSONP调用此处理程序 要求。 see here
解决方法是明确指定超时作为选项。如果服务器在指定的时间内没有响应,则将调用错误函数。有关此here的更多信息。
答案 1 :(得分:5)
之前我遇到过此错误,并在使用jquery-JSONP
后解决了<强> [实施例] 强>
$.getJSON('http://server-url/Handler.ashx/?Callback=DocumentReadStatus',
{
userID: vuserID,
documentID: vdocumentID
},
function(result) {
if (result.readStatus == '1') {
alert("ACCEPTED");
}
else if (result.readStatus == '0') {
alert("NOT ACCEPTED");
}
else {
alert(result.readStatus);
}
});
答案 2 :(得分:2)
用于解析外部订阅源并捕获可能的错误,您可以使用此
function GetContent(feedUrl)
{
var feedApiGetJSON = 'http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&callback=?&q=';
$.ajax({
url: feedApiGetJSON + feedUrl,
dataType: 'jsonp',
jsonpCallback: 'JsonpCallback'
});
}
function JsonpCallback(data) {
if (data.responseStatus == "200")
alert(data.responseData.feed.title);
else
alert(data.responseDetails);
答案 3 :(得分:1)
替换:datatype with dataType