博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jquery ajax 调用webservice以及跨域问题
阅读量:4701 次
发布时间:2019-06-09

本文共 3340 字,大约阅读时间需要 11 分钟。

先在服务器端配置webconfig,因为默认情况下是不支持post,get访问

在system.web 中间

 

 

本地调用

客户端

$(document).ready(function () {        $("#button1").click(function () {            var p_code = $("#pcode").val();            var m_code = $("#mcode").val();            var language = 'ch';            $.ajax({                type: "post", //访问webservice使用POST方式请求                 contentType: "application/json;gb2312", //WebService会返回Json类型                 url: "Service1.asmx/GetData", //调用WebService方法                 data: "{goods_no:'" + p_code + "',mer_no:'" + m_code + "',language:'" + language + "'}", //要传递的参数,没有传参时,也一定要写上                 dataType: "json",                success: function (result) {                    //$("#divtips").slideToggle(1000);                    $("#divtips").slideDown();                    result = result.d; //返回d后面的json内容                     $("#tips").html(result);                }            });        });    });

 

跨域不得不说jsonp=json+padding (json数据填充)

这是一种通过在客户端注册一个回调函数(callback)传给服务器,然后在服务器端获取函数名并将json数据作为参数填充到函数中返回给客户端((callbackFunName + "([ { name:\"John\"} ] )")),而客户端就在预先定义好的callback回调函数里获取传来的json数据。

详细原理如下:

Jsonp原理:

首先在客户端注册一个callback, 然后把callback的名字传给服务器。

 

此时,服务器先生成 json 数据。 

然后以 javascript 语法的方式,生成一个function , function 名字就是传递上来的参数 jsonp.

 

最后将 json 数据直接以入参的方式,放置到 function 中,这样就生成了一段 js 语法的文档,返回给客户端。

 

客户端浏览器,解析script标签,并执行返回的 javascript 文档,此时数据作为参数,传入到了客户端预先定义好的 callback 函数里.(动态执行回调函数)

 

超简单的demo如下:

         Test Jsonp                   

其中 jsonCallback 是客户端注册的,获取跨域服务器上的json数据后,回调的函数。

http://crossdomain.com/jsonServerResponse?jsonp=jsonpCallback

这个 url 是跨域服务器取 json 数据的接口,参数为回调函数的名字,返回的格式为

jsonpCallback({msg:'this is json data'})  

 

jsonp一般都是以get的方式获取的,这边我想介绍2个方法($.getJSON,$.AJAX)

 

$.getJSON(url,data,callback)

举个.NET webservice 的例子客户端$.getJSON(               "http://192.168.0.66/services/WebService1.asmx/ws?callback=?",            { name: "ff", time: "2pm" },                function(data) { alert(data.msg) }   );服务器端   [WebMethod]          public void ws(string name,string time) {        HttpRequest Request = HttpContext.Current.Request;        string callback = Request["callback"];        HttpResponse Response = HttpContext.Current.Response;       // Response.ContentEncoding = Encoding.UTF8;         // Response.ContentType = "application/json";          Response.Write(callback + "({msg:'this is"+name+"jsonp'})");        Response.End();    } 如果返回值是一个对象   $.getJSON( "http://192.168.0.66/services/WebService1.asmx/ws?callback=?",

  { name: "ff", time: "2pm" },

        function(result) {   

         for(var i in result) {   

            alert(i+":"+result[i]);//循环输出a:1,b:2,etc.   

        }   

    });   

 

 详细内容可参考:

$.ajax

客户端

 详细出处参考:http://www.jb51.net/article/28502.htm

服务器端

<%@ WebHandler Language="C#" Class="ajax" %> using System; using System.Web; public class ajax : IHttpHandler { public void ProcessRequest (HttpContext context) { context.Response.ContentType = "text/plain"; string callbackFunName = context.Request["callbackparam"]; context.Response.Write(callbackFunName + "([ { name:\"John\"} ] )"); } public bool IsReusable { get { return false; } } } 详细出处参考:http://www.jb51.net/article/28502.htm

 

 另外参考:

 

转载于:https://www.cnblogs.com/userbibi/archive/2012/12/04/2801232.html

你可能感兴趣的文章
[解题报告] 100 - The 3n + 1 problem
查看>>
Entity Framework 学习高级篇1—改善EF代码的方法(上)
查看>>
Mybatis逆向工程配置文件详细介绍(转)
查看>>
String类的深入学习与理解
查看>>
不把DB放进容器的理由
查看>>
OnePage收集
查看>>
Java parseInt()方法
查看>>
yahoo的30条优化规则
查看>>
[CCF2015.09]题解
查看>>
[NYIST15]括号匹配(二)(区间dp)
查看>>
json_value.cpp : fatal error C1083: 无法打开编译器生成的文件:No such file or directory
查看>>
洛谷 P1101 单词方阵
查看>>
Swift DispatchQueue
查看>>
C#和JAVA 访问修饰符
查看>>
小甲鱼OD学习第1讲
查看>>
HDU-1085 Holding Bin-Laden Captive-母函数
查看>>
php提示undefined index的几种解决方法
查看>>
LRJ
查看>>
Struts2环境搭建
查看>>
Linux: Check version info
查看>>