我正在使用jQuery尝试jsonp。我在网上发现了很多例子,我相信我的代码是正确的,但它仍然不适合我。
我的网络服务:
using System.Web;
using System.Web.Script.Services;
using System.Web.Services;
using System.Web.Script.Serialization;
namespace App_Code
{
/// <summary>
/// Summary description for WebService
/// </summary>
[WebService(Namespace = "http://tempuri.org/", Name = "WebService")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
[ScriptService]
public class WebService : System.Web.Services.WebService
{
[WebMethod]
[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
public string GetAd()
{
var json = new JavaScriptSerializer().Serialize(new
{
Prop1 = "some property",
});
string callback = HttpContext.Current.Request["callback"];
return string.Format("{0}({1})", callback, json);
}
}
}
客户端:
$(document).ready(function () {
alert('Loading...');
$.ajax({ url: 'http://mediaserver/WebService.asmx/GetAd?callback?',
data: {},
success: function (json) {
alert(json);
}
});
});
Firebug显示这是成功的,但我从警报中得到了null。我在iis7本地使用我的web服务,我正在通过我的客户端项目中的调试进行测试。
我需要跨域工作。
请帮忙。
答案 0 :(得分:1)
您的网址http://mediaserver/WebService.asmx/GetAd?callback?
我的想法是它需要
$(document).ready(function () {
alert('Loading...');
$.ajax({ url: 'http://mediaserver/WebService.asmx/GetAd?callback=',
data: {},
success: function (json) {
alert(json);
}
});
});
答案 1 :(得分:0)
我认为您在网址中缺少=
。 callback
应该有=
(至少它对我来说是这样的)。第一行是:
$.ajax({ url: 'http://mediaserver/WebService.asmx/GetAd?callback=?'
...
此外,您没有指定要JSON,要么在ajax请求中使用dataType: 'json'
,要么直接使用$.getJSON
(doc)。不确定jQuery是否能够自动检测JSONP。这可能不会导致这个错误。