我正在使用jsonp和ajax查询在另一台服务器上用java编写的web服务。我使用以下的jQuery命令:jQuery,ajax和jsonp有问题
$.ajax({
type: "GET",
url: wsUrl,
data: {},
dataType: "jsonp",
complete: sites_return,
crossDomain: true,
jsonpCallback: "sites_return"
});
function jsonp_callback(data) {
console.log(data);
}
function sites_return(data) {
console.log(data);
}
所以我的问题是,查询结束后,被称为所谓的jsonp_callback功能。我在哪里可以清楚地看到JSON格式的字符串:
{"listEntries":["ELEM1", "ELEM2", "ELEM3", etc...]}
但经过功能sites_return被调用时,完整的事件触发时,我得到如下:
Object { readyState=4, status=200, statusText="parsererror"}
也可对照的jsonp_callback功能在sites_return函数之前调用。另外,如果我从代码中取出jsonp_callback函数,我会得到一个投诉它的萤火虫,该函数没有实现。
我的问题三倍: 1)我在jquery方面做错了什么? 2)为什么json在jsonp_callback中正确解析,但没有sites_return? 3)我能做些什么来解决这些问题?
编辑
一些新的发展。根据这里的评论是一些额外的信息。
下面是什么出来的HTTP响应
jsonp_callback({"listEntries":["ELEM1", "ELEM2", "ELEM3"]})
的我认为这是什么原因jsonp_callback被调用。我想现在我的问题变成了,是否有任何方法可以控制这种情况(假设我没有访问后端Web服务的权限)。
我认为我们将需要看到所有的JSON,因为它可能会导致解析错误。 – Pointy 2011-06-13 13:39:41
此外,不清楚为什么“jsonp_callback”函数被调用。 – Pointy 2011-06-13 13:40:47
这就是所有的json。我用虚拟名称替换了实际的元素,但是格式完全相同(当然不包括等等)。以下是HTTP标题响应中的内容。 jsonp_callback({“listEntries”:[“ELEM1”,“ELEM2”,“ELEM3”]})。看着它,我认为函数被调用,因为它是如何在http头中格式化的。 – sumone4life 2011-06-13 13:46:48