繁体   English   中英

JSONP Ajax回调未触发

[英]JSONP Ajax callback not firing

我正在尝试使用JSONP调用Web服务,传入一个整数以获取两个整数。 通常,我会使用常规的JSON,但会调用不同的端口号(从网站到Web服务,但都在同一域中)。

对于上下文,我传入用户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。 也许有一个更简单的选择,因为我可以通过浏览器轻松地做到这一点。

您的服务器需要返回有效的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) . ');';

尝试像这样使用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

原来这是一个客户端问题。 显然,用户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);
            }
        });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM