2011-12-05 6 views
2

.aspxページ内のドメインAでホストされているWebメソッドがあります。私はドメインBからこのメソッドを呼び出す必要があります。私は$getJSON()を使ってこの呼び出しを行っていますが、返されるときにはいつもdata.query.results[0]はnullです。ドメインBでjqueryを使用したクロスドメインwebmethodコール

jQueryのコード

// Accepts a url and a callback function to run. 
function requestCrossDomain() { 
    var site = 'http://domain A/Services/A.aspx/GetString'; 
    var yql = 'http://query.yahooapis.com/v1/public/yql?q=' + encodeURIComponent('select * from html where url="' + site + '"') + '&format=json&callback=?'; 

    $.getJSON(yql, cbFunc); 

    function cbFunc(data) { 
     if (data.query.results[0]) { 
      var result = JSON.parse(data.results[0]); 
      alert(result); 
     } 
     else 
      throw new Error('Nothing returned from getJSON.'); 
    } 
} 

ドメインA WebMethod属性

<WebMethod()> 
<ScriptMethod(ResponseFormat:=ResponseFormat.Json, UseHttpGet:=True)> 
Public Shared Function GetString() As String 
    Dim ResultString As String = New JavaScriptSerializer().Serialize("Test Result") 
    Return ResultString 
End Function 

私は、同じドメインからメソッドを呼び出したときに、上記の方法は絶対に正常に動作します。しかし、クロスドメインコールは常にnullを返します。

私がFiddlerをチェックインしたとき、サーバーが応答し、コンテンツの長さが616であることを示すトラックがあります。しかし、私が返す結果はnullです。

レスポンスヘッダ

HTTP/1.1 200 OK
のCache-Control:プライベート
のContent-Type:text/htmlの。文字セット= UTF-8
コンテンツエンコード:gzipで
は異なります受け入れ-エンコーディング
サーバー:マイクロソフト-IIS/7.5
X-ASPNET-バージョン:4.0.30319
X-、ソースファイル:?= UTF-8を???B QzpcQ29tbW9uXFBST1xIUk9cU2VydmljZXNcSFJPQ29yZS5hc3B4 =
X-パワード・バイ:ASP.NET
日:月、2011年12月5日午後03時07分54秒GMT
のContent-Length:616

は私が何かわかりません私は行方不明です。私はJSONP$getJSONを使って試しました。どちらも値を返しません。

詳細情報が必要な場合はお知らせください。

答えて

0

大丈夫ですが、スクリプトに2つの問題があります。まず、cbFuncを作成してからgetJSONに渡す必要があります。第2に、ヤフーが作成時に警告することでデータを返すかどうかを確認します。結果が空の場合は、yahoo apiの詳細が必要になります。

// Accepts a url and a callback function to run. 
function requestCrossDomain() { 
    function cbFunc(data) { 
     if (data.query.created) { 
      //var result = JSON.parse(data.results[0]); 
      alert(data.query.created);//put a breakpoint here to check the data.results if you get it created. 
     } 
     else 
      throw new Error('Nothing returned from getJSON.'); 
    } 

    var site = 'http://domain A/Services/A.aspx/GetString'; 
    var yql = 'http://query.yahooapis.com/v1/public/yql?q=' + encodeURIComponent('select * from html where url="' + site + '"') + '&format=json&callback=?'; 

    $.getJSON(yql, cbFunc); 

} 
+0

しかし、私は私が逃しているものを持っていると思う。私が指定したドメインは、異なるポートのローカルホストでホストされています。 Domian A:localhost:12345およびdomain B:loclahost:45612.これらのアプリケーションはWebでホストされていません。私のローカルマシンでのみ利用可能です。インターネット経由で閲覧することはできません。それがyahoo apiが私が要求しているページにscriptタグを投稿できない理由であるかどうか説明できますか? – user1081802

関連する問題