感谢vs_sundaylove提供的帮助。
链接地址:http://blog.csdn.net/vs_sundaylove/article/details/6586113
在jquery1.4以上版本加强了json的验证,必须标准才能相应success。
另外须在asmx内中加上ScriptService标记才能正常访问:
[ScriptService][WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。
// [System.Web.Script.Services.ScriptService]
public class gethouse : System.Web.Services.WebService
代码如下:
var response = HttpContext.Current.Response;
var context = HttpContext.Current.Request;
response.Clear(); //清空无关信息
response.Buffer = true; //完成整个响应后再发送
response.Charset = "GB2312";//设置输出流的字符集-中文
response.AppendHeader("Content-Disposition", "attachment;filename=Report.doc");//追加头信息
response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");//设置输出流的字符集
response.ContentType = "text/json";
person p = new person();
p.id = page; p.name = "zhangzhan";
JavaScriptSerializer jser = new JavaScriptSerializer();
//获取回调函数名
response.Write(jser.Serialize(p));
}
/
$.ajax({
type: "post", //访问WebService使用Post方式请求
url: "/house/gethouse.asmx/gethouses", //调用Url(WebService的地址和方法名称组合---WsURL/方法名)
data: "{page:'1'}", //这里是要传递的参数,为Json格式{paraName:paraValue}
contentType: "Application/Json", // 发送信息至服务器时内容编码类型
beforeSend: function (XMLHttpRequest) {
XMLHttpRequest.setRequestHeader("Accept", "Application/Json"); // 接受的数据类型。(貌似不起作用,因为WebService的请求/返回 类型是相同的,由于请求的是Json,所以,返回的默认是Json)
},
success: function (data) {
var jsonValue = data;
alert(jsonValue.d[0].id); // 输出Json
var el, li, i;
el = document.getElementById('thelist');
for (i = 0; i < 3; i++) {
li = document.createElement('li');
li.innerText = 'Generated row ' + jsonValue.d[0].name;
el.appendChild(li, el.childNodes[0]);
}
},
complete: function (XMLHttpRequest, textStatus) {
var returnText = XMLHttpRequest.responseText;
alert(returnText); // 输出服务器端返回数据
},
error: function () { }
});