- 当前出现一问题就是我的Ajax请求返回的值有些牟盾,我在firefox 中跟踪调试的时候发现ajax请求服务器,返回结果是正常,状态码是200, 但是程序就是不进如到success方法体中,我的Ajax请求如下:
- //发送异步请求改变相应服务器的日志级别。
- function changeLogLevel(url){
- $.ajax({
- url : url,
- async : true,
- dataType:"jsonp",
- jsonp:"callbackfun",
- success : function(data) {
- var res = data.content;
- if(res == "234"){
- alert("日志级别更新失败");
- }else if(res == "246"){
- alert("日志级别更新成功");
- }
- },
- error : function(XMLHttpRequest,textStatus,errorthrow){
- alert("XMLHttpRequest.status="+XMLHttpRequest.status);
- },
- complete: function(data,status){
- alert("data=="+data);
- }
- });
- }
- 请求的页面资源如下:
- <%@ page import="*.cbb.log.service.ILogConfig"%>
- <%@ page import="*.cbb.log.service.impl.LogConfigImpl"%>
- <%
- String toChangeLevel = request.getParameter("to");
- ILogConfig logConImpl = new LogConfigImpl();
- boolean flag = logConImpl.updateLevel(toChangeLevel);
- if(flag){
- out.write("success");
- }else{
- out.write("fail");
- }
- %>
- 经过查找资料,发现不光客户端需要采用jsonp 方式请求资源,同时请求的服务端返回的值必须做相应的处理,上面的例子中换成如下方式即可:
- <%@ page import="*.cbb.log.service.ILogConfig"%>
- <%@ page import="*.cbb.log.service.impl.LogConfigImpl"%>
- <%
- String toChangeLevel = request.getParameter("to");
- String callback = request.getParameter("callbackfun");
- ILogConfig logConImpl = new LogConfigImpl();
- boolean flag = logConImpl.updateLevel(toChangeLevel);
- if(flag){
- out.write(callback+"({content:'success'})");
- }else{
- out.write(callback+"({content:'fail'})");
- }
- %>
- 简单的ajax 跨域请求必须关注两点:
- 1. 客户端发送请求时dataType 必须是jsonp的方式。
- 2.服务器端返回值必须符合一些规范,即在请求中获取回调函数,将回调函数和json形式结果组合在一起才能完成。
- 注意如果客户端ajax中没有写jsonp: callbackfun 的话,在服务端就以如下的方式获取客户端的回调函数:
- request.getParameter("callback");