簡體   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