我在.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
。两者都没有返回任何值。
如果您需要任何进一步的信息,请与我们联系。
答案 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}}