jQuery和jsonp跨域 - 请帮忙

时间:2011-03-29 15:41:33

标签: asp.net jquery cross-domain jsonp

我正在使用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服务,我正在通过我的客户端项目中的调试进行测试。

我需要跨域工作。

请帮忙。

2 个答案:

答案 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',要么直接使用$.getJSONdoc)。不确定jQuery是否能够自动检测JSONP。这可能不会导致这个错误。