我试图使用JSONP来调用Web服务,传入一个整数来获取两个整数。通常我会使用常规JSON,但我会调用不同的端口号(到网络服务,从网站,但在同一个域中)。
对于上下文,我传入用户ID以获取未读任务和通知的数量,以填充屏幕上显示的一些数字。
以下是代码:
var url = "localhost:13742/api/notices/get" ;
$.getJSON(url + "?callback=?", $("#__UserId").val(), function (response) {
console.log("Number of unread tasks- " + response.UnreadTasks + ". Number of unread notices- " + response.UnreadNotices);
});
正如标题所示,我指定的回调未被解雇 - 我没有收到任何日志,包括错误。我知道服务器端代码正在运行,因为我可以通过浏览器手动访问它 - 我只是传入查询字符串并且它工作正常(将信息作为XML文档返回)。目前还没有安全保障,因此我不必担心传递身份验证标头。
这是我第一次使用JSONP,虽然我已经使用了常规的JSON。也许有一个更简单的选择,因为我可以通过浏览器轻松完成。
答案 0 :(得分:1)
您的服务器需要返回有效的JSONP响应才能生效。 JSONP的特殊之处在于它只是一个JavaScript文件。这是跨域工作的方式,因为它只会在您的头上添加<script>
标记。
JSONP 不是 JSON,也不是XML。您说您的URL将数据作为XML文档返回?那是不对的。这就是它无法正常工作的原因。
JSONP应该只是对通过callback=
传入的函数的函数调用,数据作为第一个参数。
我不知道您的服务器是什么语言,但在PHP中它可能如下所示:
<?php
$data = array(
'UnreadTasks' => 5,
'UnreadNotices' => 8
);
header('Content-type: application/javascript');
echo $_GET['callback'] . '(' . json_encode($data) . ');';
答案 1 :(得分:0)
尝试使用ajax
,如下所示:
$.ajax({
url: "localhost:13742/api/notices/get",
dataType: "jsonp",
data: $("#__UserId").val(),
success: function(data) {
console.log("Number of unread tasks- " + data.UnreadTasks + ". Number of unread notices- " + data.UnreadNotices);
},
error: function(jxhr, status, err) {
console.log("Error, status = " + status + ", err = " + err);
}
});
你也确定'localhost:13742 / api / notices / get'支持jsonp - http://en.wikipedia.org/wiki/JSONP
答案 2 :(得分:0)
原来这是一个客户端问题。显然,用户ID需要包含在URL中。毕竟服务器似乎没问题。相当无聊的解决方案,但我们去了。
感谢所有帮助过的人。
$.ajax({
url: "localhost:13742/api/Notices/" + $("#__UserId").val(),
dataType: "jsonp",
success: function (data) {
console.log("Number of unread tasks- " + data.UnreadTasks + ". Number of unread notices- " + data.UnreadNotices);
},
error: function (jxhr, status, err) {
console.log("Error, status = " + status + ", err = " + err);
}
});