php文件jsonp返回字符串格式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php文件jsonp返回字符串格式相关的知识,希望对你有一定的参考价值。

只差返回字符串格式了,之前用echo json_encode(数组);试过多次不行.

你试一下 return json_encode 看行不行。如果不行,那看看你前台 jquery的 type属性是否设置了 json 格式。

$.ajax(
type : json,
)

祝你好运
参考技术A 是用jquery来异步获取JSON数据吧?有可能是你的jquery代码有问题或者是你的php页面有错误。你先测试看直接访问提供json数据的php网页,看看有没有输出json字符串追问

jq没有问题我用jq案例里面的代码,然后把json对象转化成字符串,打印出来,用别人的url=>http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=就可以显示,我的url=>
http://192.168.1.19/01.php就不能显示

追答

我访问不了你的本地页面的http://192.168.1.19/01.php。你再好好测试一下吧,不要太绝对。

祝好运!

参考技术B 参考答案 我和你不一样,因为我是人本回答被提问者采纳

jsonP格式接口实现

  单位开发了一个app系统,app外包,服务由自开发的薪资查询系统提供。app与后端交互采用jsonp解决跨域问题。

  JSONP的实现,需要加上一个callback,JSONP和普通JSON的区别在于普通JSON,返回时

out.write("{name:‘Xie Feng‘}");

  而jsonp的返回则是

out.write("callback({name:‘Xie Feng‘}");

  callback实际是一个js端的函数名称,双方可以任意约定

  所以对于服务器端唯一区别在于,返回的string多一个callback(xxxx)

  • jsonp只能使用get请求,解决同源问题,返回javascript代码,因为请求javascript文件是没有同源问题的。 

  • 当请求数据类型为jsonp时,会将callback=jsonpCallback加在url上,http://localhost:8090/api/testcallback=jsonpCallback 

  • 前台javascript中定义jsonpCallback函数,此函数必须定义在window下,也就是全局的函数,否则找不到。 

  • 后台获取请求的callback参数值jsonpCallback,返回字符串"jsonpCallback(result)",result为返回结果。 

  • 请求返回的是script tag,首先会调用jsonpCallback函数,不管是否找到该函数,都会调用success函数。 

  • 如果没有定义jsonp和jsonpCallback,jsonp默认为"callback",jsonpCallback会是Jquery自动生成的函数名。 


  可以参考例子

  代码如下,struts配置:

<action name="querySalaryByKeyForApp" class="salaryAction" method="querySalaryByKeyForApp">
			<result name="success">jsonp.jsp</result>
		</action>

jsonp.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
 
String jsoncallback = request.getParameter("callback");
String jsonResult = (String)request.getAttribute("salaryResult");
out.println("callback("+jsonResult+")");
%>

方法实现

	public String querySalaryByKeyForApp() {
		try{
			SalUserEntity salUserQuery = new SalUserEntity();
			if(salaryVo == null || salaryVo.getSalaryEntity() == null){
				salaryResult = "{errorMsg : 错误}";
				return SUCCESS;
			}
			String staffId = salaryVo.getSalaryEntity().getStaffId();
			String year = salaryVo.getSalaryEntity().getYear();
			String month = salaryVo.getSalaryEntity().getMonth();
			String password = salaryVo.getSalaryEntity().getPassword();
			if(StringUtils.isEmpty(staffId) || StringUtils.isEmpty(year) || StringUtils.isEmpty(month) 
					|| StringUtils.isEmpty(password)){
				salaryResult = "{errorMsg : 错误}";
				return SUCCESS;
			}
			salUserQuery.setStaffId(staffId);
			salUserQuery.setPassword(password);
			if(salUserService.valUser(salUserQuery)){
			
				salUserService.valUser(salUserQuery);
				List<SalaryEntity> entities = salaryService.querySalaryList(salaryVo.getSalaryEntity());
				if(entities == null || entities.size() != 1){
					throw new SalaryException("您的薪资数据未录入,新联系HR!");
				}
				List<Map<String, Object>> valueMap = entity2ListOfMap(entities.get(0));
				
				
				JSONArray jsonObject = JSONArray.fromObject(valueMap);
				
				salaryResult = jsonObject.toString();
			//	jsonObject.accumulate("jsonObject",entities.get(0));
			//	salaryVo.setSalaryEntity(entities.get(0));
				return SUCCESS;
			} else {
				salaryResult = "{errorMsg : 错误}";
				return SUCCESS;
			}
		}catch (Exception e) {
			salaryResult = "{errorMsg : 错误}";
			return SUCCESS;
		}
		//return ERROR;
	}

json转换:

	private JSONArray entity2ListOfMap(SalaryEntity salary) {
		if(salary == null){
			salary = new SalaryEntity();
			return entity2ListOfMap(salary);
		}
		JSONArray result  = new JSONArray();
		JSONObject basicInfo = new JSONObject();//基本信息
		JSONObject wageInfo = new JSONObject();//应发工资
		JSONObject buckleInfo = new JSONObject();//实扣工资
		JSONObject realInfo = new JSONObject();//实发工资
		JSONObject gscdInfo = new JSONObject();//公司承担
		
		JSONArray basicMap = new JSONArray();
		JSONArray wageMap = new JSONArray();
		JSONArray buckleMap = new JSONArray();
		JSONArray realMap = new JSONArray();
		JSONArray gscdMap = new JSONArray();
		JSONObject jsonObjectgh = new JSONObject();
		jsonObjectgh.put("name", "工号");
		jsonObjectgh.put("value",salary.getStaffId());
		basicMap.add(jsonObjectgh);
		JSONObject jsonObjectxm = new JSONObject();
		jsonObjectxm.put("name", "姓名");
		jsonObjectxm.put("value",salary.getStaffName());
		basicMap.add(jsonObjectxm);
		JSONObject jsonObjectbm = new JSONObject();
		jsonObjectbm.put("name", "部门");
		jsonObjectbm.put("value",salary.getDept());
		basicMap.add(jsonObjectbm);
		JSONObject jsonObjectks = new JSONObject();
		jsonObjectks.put("name", "科室");
		jsonObjectks.put("value",salary.getClass_());
		basicMap.add(jsonObjectks);
		JSONObject jsonObjectnf = new JSONObject();
		jsonObjectnf.put("name", "年份");
		jsonObjectnf.put("value",salary.getYear());
		basicMap.add(jsonObjectnf);
		JSONObject jsonObjectyf = new JSONObject();
		jsonObjectyf.put("name", "月份");
		jsonObjectyf.put("value",salary.getMonth());
		basicMap.add(jsonObjectyf);

		basicInfo.put("category", "基本信息");
		basicInfo.put("id", "info");
		basicInfo.put("items", basicMap);
		result.add(basicInfo);
		
		return result;
	}

   接口用http形式提供:

技术分享


本文出自 “江南矿工技术空间” 博客,请务必保留此出处http://jncumter.blog.51cto.com/812546/1750964

以上是关于php文件jsonp返回字符串格式的主要内容,如果未能解决你的问题,请参考以下文章

axios如何进行跨域以及对返回格式为回调函数字符串的处理

XMLHttpRequest cannot load JSONP

php中ajax不返回json返回字符串直接进入error

jsonp -> json_decode()

jsonp应用

AJAX中的dataType