jsonp 前端和后端的结合

本文通过一个具体的示例详细介绍了 JSONP 的工作原理及其在实现跨域请求中的应用。包括前端 JavaScript 代码如何设置回调函数以及后端 PHP 如何响应此请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

jsonp一个熟悉的名字,做为一个不牛逼的前端总是不断的复制别人写的跨域调用,今天终于理解了跨域ajax请求前端和后端的结合了。

本人理解上可能有误,如有错误请忽略偷笑

首先稍微理解下jsonp,

jsonp我今天的理解就是浏览器跨域请求返回一个js函数字符串,返回一个有效的可执行的js标签。

上案例

html代码

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>跨域调用</title>
	<script type="text/javascript" src="jquery.mini.js"></script>
	
</head>
<body>
<input type="button" onclick="getTime()" value="跨域按钮">
<script type="text/javascript">
function showJson(data){
	 //result= data;
	 alert(data);
	
}
function getTime(){
		var url = 'http://yichou.com:81/zhang.php?callback=showJson';

		$.ajax({
			url:url,
			dataType:"jsonp",  
			success: function(msg){
				alert(msg.err);
			
			},
			error:function(){
				alert('请求失败');
			}

		});
	}


</script>
</body>
</html>
showJson(data)函数  作为 jsonp回调函数 必须存在 因为后台返回的是一个有效的js函数调用字符串  不存在将导致失败


var url = 'http://yichou.com:81/zhang.php?callback=showJson'; 此处跟其他的ajax调用一样 是请求的url  注意 此处必须传递要一个参数 做为jsonp的回调函数  就是定义的showJson函数


dataType:"jsonp" 定义为jsonp

其他的参数就不做解释了


php

$data = json_encode(array('err'=>'跨域调用','code'=>'你错了'));
echo $_GET['callback'].'('.$data.')';

此处就可以看到传递的callback的用处

后台返回的就是回调函数即

showJson('{"err":"\u8de8\u57df\u8c03\u7528","code":"\u4f60\u9519\u4e86"}') 

返回的是一个有效的可执行的js函数调用的字符串

请求成功 $data 就作为返回的结果可在success中使用

注意事项:

必须要有回调函数,回调函数必须跟后台程序返回函数名称一致 本人理解有限 希望大家多多指导







<think>好的,用户想知道前端后端如何交互以及关联方法。我需要先整理一下前端后端交互的基本流程,然后结合引用中的信息来回答。 首先,用户提到的几个引用里提到了接口地址、参数传递、数据格式这些点。引用1提到要关注接口地址、请求参数返回参数,调用接口验证数据是否正确[^1]。引用4则说明前后端使用统一的数据格式,比如JSON或XML,其中JSON更常用[^4]。引用3引用4还提到了前端元素如何与后端连接,比如按钮点击触发请求[^3]。 接下来,我应该分步骤解释交互过程。第一步是接口定义,需要明确接口地址、请求方法(GET、POST等)、参数返回的数据结构。这部分引用1引用4都有涉及。第二步是前后端开发,前端用JavaScript发起请求,后端用Java处理请求并返回数据。引用3中的例子是安卓前端通过按钮点击发送请求,类似地,网页前端可能用Ajax或Fetch API。第三步是数据格式统一,使用JSON,这点引用4强调了。第四步是连接测试,确保数据正确,如引用1所说。第五步是部署联调,处理跨域问题,引用4提到JSONP或CORS。最后,安全性优化方面,引用2提到HTTPS的区别,可以补充安全性措施[^2]。 然后,生成相关问题需要考虑用户可能想深入了解的点,比如具体的数据格式选择、接口设计原则、常见问题如跨域处理、性能优化方法,以及安全措施。这些问题应该覆盖用户可能遇到的后续疑问。 需要确保回答结构清晰,每个步骤都有例子或引用支持,同时语言要口语化,避免使用专业术语过多。最后检查引用是否正确对应,比如引用2是关于HTTPHTTPS的区别,应该在安全性部分提到。引用34关于前后端连接数据格式,要正确标注。</think>### 前端后端交互的实现方法 前端后端的交互主要通过**接口调用****数据格式协商**实现,具体步骤如下: --- #### 1. **接口定义与协议约定** - **接口地址**:前后端需约定统一的URL路径,例如`/api/user/login`[^1]。 - **请求方法**:明确使用HTTP方法(GET/POST/PUT/DELETE),例如: ```javascript // 前端发起GET请求示例 fetch('/api/data?id=123', { method: 'GET' }); ``` - **参数格式**: - GET请求参数通过URL查询字符串传递(如`?id=123`)。 - POST请求参数通过请求体传递,常用`JSON`格式。 - **返回数据**:后端统一返回JSON格式,例如: ```json { "code": 200, "data": { "name": "张三" }, "message": "成功" } ``` --- #### 2. **前后端开发实现** - **前端**:通过事件触发请求(如按钮点击)并处理响应: ```javascript // 网页前端示例(使用Fetch API) document.getElementById("button").addEventListener("click", async () => { const response = await fetch('/api/data', { method: 'POST', body: JSON.stringify({ username: "test" }) }); const result = await response.json(); console.log(result.data); }); ``` [安卓前端示例](^3)类似,通过`OkHttp`或`Retrofit`库发送请求。 - **后端**(以Java为例): ```java @RestController public class UserController { @PostMapping("/api/data") public ResponseEntity<Map<String, Object>> getData(@RequestBody UserRequest request) { // 处理业务逻辑 return ResponseEntity.ok(Map.of("code", 200, "data", processedData)); } } ``` --- #### 3. **数据格式统一** - 使用**JSON**作为通用数据格式(轻量且易解析)[^4]: ```json // 请求体示例 { "page": 1, "pageSize": 10 } ``` --- #### 4. **连接测试与调试** - 工具验证:使用`Postman`或`curl`直接调用接口,检查返回数据是否符合预期。 - 日志排查:后端记录请求参数,前端捕获网络错误。 --- #### 5. **部署与联调** - **跨域问题**:通过`CORS`配置或`Nginx`反向代理解决。 - **环境配置**:确保开发、测试、生产环境的接口地址一致。 --- #### 6. **安全性增强** - 使用**HTTPS**加密通信(对比HTTP更安全)。 - 添加身份验证(如JWT令牌)。 --- ### 关键关联方式总结 | 环节 | 实现方法 | 工具/技术 | |------------|--------------------------------------|-----------------------| | 接口定义 | RESTful协议 + OpenAPI文档 | Swagger | | 数据传输 | JSON + HTTP/HTTPS | Fetch/Axios/OkHttp | | 错误处理 | 状态码(如404/500) + 统一响应格式 | 全局异常拦截器 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值