2

JSONP を使用して Web サービスを呼び出し、整数を渡して 2 つの整数を取得しようとしています。通常は通常の JSON を使用しますが、別のポート番号に呼び出しています (Web サービスに対して、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 ドキュメントとして返します)。今のところセキュリティはありませんので、認証ヘッダーの受け渡しについて心配する必要はありません。

通常の JSON は結構使ったことがありますが、JSONP を使うのはこれが初めてです。ブラウザから簡単にできるので、もっと簡単なオプションがあるかもしれません。

4

3 に答える 3

1

これが機能するには、サーバーが有効な JSONP 応答を返す必要があります。JSONP は、単なる JavaScript ファイルであるという点で特別です。<script>頭にタグを追加するだけなので、それがクロスドメインで機能する方法です。

JSONP はJSON でも XML でもありません。あなたの URL はデータを XML ドキュメントとして返すと思いますか? それは正しくありません。それが機能していない理由です。

callback=JSONP は、第 1 パラメーターとしてデータを使用して、経由で渡された関数への関数呼び出しである必要があります。

サーバーの言語はわかりませんが、PHP では次のようになります。

<?php
$data = array(
    'UnreadTasks' => 5,
    'UnreadNotices' => 8
);

header('Content-type: application/javascript');
echo $_GET['callback'] . '(' . json_encode($data) . ');';
于 2013-07-09T16:22:31.953 に答える
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

于 2013-07-09T13:54:02.943 に答える