使用jquery跨域webmethod调用

时间:2011-12-05 15:32:40

标签: jquery .net

我在.aspx页面内的域A上托管了一个web方法。我需要从域B调用此方法。我使用$getJSON()进行此调用,但当它返回时data.query.results[0]始终为null。

域B中的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.');
    }
}

Domain 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
  缓存控制:私人
  内容类型:text / html;字符集= UTF-8
  内容编码:gzip
  变化:接受编码
  服务器:Microsoft-IIS / 7.5
  X-AspNet-Version:4.0.30319
  X-SourceFiles:=?UTF-8?B?QzpcQ29tbW9uXFBST1xIUk9cU2VydmljZXNcSFJPQ29yZS5hc3B4?=
  X-Powered-By:ASP.NET
  日期:星期一,2011年12月5日15:07:54 GMT
  内容长度:616

我不确定我错过了什么。我尝试过使用JSONP$getJSON。两者都没有返回任何值。

如果您需要任何进一步的信息,请与我们联系。

1 个答案:

答案 0 :(得分:0)

好的,我看到脚本有两个问题。首先,您应该在将cbFunc传递到getJSON之前创建// 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); } 。其次,让我们检查雅虎是否通过在创建数据时发出警报来返回数据。如果结果为空,则需要更多yahoo api的帮助。

{{1}}