`

遭遇jsonp同域下变作post请求的坑

阅读更多

今天迁移一个站点时遇到一个坑爹问题,同一个jsonp接口在跨域时都能调用成功,但是在同域下调用虽然成功,但是数据却有问题. 此处贴出我的后端代码片段

$mi_id = htmlspecialchars(trim($_GET['mi_id ']));
$mi_cv = htmlspecialchars(trim($_GET['mi_cv ']));

 贴出我前端代码片段:

$.ajax({
                    url: jsonp_login_url,
                    data: data,
                    type: 'POST',// 此处修改成 GET 就没有问题
                    dataType: 'jsonp'
                }).success(function(res)

 

注意看 我标识出的代码,

 

当使用 post 类型时,虽然提交的 dataType 设置成 jsonp 但是在后端 $_GET 是取不到参数的,

 

按我的理解, jsonp 应该就是 动态创建了一个 script 标签而已啊,为什么会有这个问题呢?

 

我搜了下一些资料,没有找到原因在哪? 不过找到了一种新的跨域解决方案: CORS

http://www.360doc.com/content/14/0106/11/15643_343005039.shtml

 

倒是蛮有意思的一个跨域方案...

 

有人知道的给我个回复

 

 我好奇的是 发出 jsonp 请求时正常来说 应该是创建 script标签 然后get 一个url 地址才对啊


但是 同域下 jquery 创建script 标签时却可以发出 post 请求
 
----------------------------------------------------------------------------------------------------------------
答案已经找到:
写道
同域下 jquery jsonp post的问题我找到答案了 jsonp支持post,那么内部机制便不是使用inject script标签的机制。而是隐藏的iframe+form表单提交。此时server端就要去读取form数据,而非get
 
1
0
分享到:
评论
3 楼 前端谢亮 2015-04-23  
因为同域的时候type=post时是支持异步提交的,只有在跨域后才会创建script标签
2 楼 vb2005xu 2015-02-10  
http://itindex.net/detail/49267-webuploader-%E6%96%87%E4%BB%B6-%E4%B8%8A%E4%BC%A0 不错的web文件上传的分析讲解
1 楼 vb2005xu 2015-01-29  
经过测试,后端使用$_POST 确实能够获取到参数值,

相关推荐

    详解如何在Vue项目中发送jsonp请求

    在页面a中由前端发送一个jsonp请求到客户方,得到一个token值 前端得到token值后向自己后端发送一个请求,后端根据token去redis(token的值就是redis里的key)里取值(key=token的值,value=用户信息等)判断用户是否已...

    html通过 ajax jsonp跨域请求接收和传送数据

    **AJAX和JSONP跨域请求的实现过程** 1. **AJAX跨域**: 通常,AJAX请求受到同源策略限制。为实现跨域,我们可以使用CORS(Cross-Origin Resource Sharing)机制。服务器需要在响应头中添加`Access-Control-Allow-...

    jsonpajax跨域请求

    JSONP(JSON with Padding)和AJAX是两种常见的在JavaScript中实现跨域数据请求的技术。在Web开发中,由于浏览器的同源策略限制,JavaScript不能直接向其他域名发送请求,但JSONP和AJAX通过特定的方式绕过了这个限制...

    Angular中的数据请求 内置模块HttpClient实现(get post jsonp 以及第三方模板axios请求数据示例代码.zip

    本篇将详细介绍HttpClient模块的使用,包括GET、POST、JSONP方法,以及如何引入并使用第三方库axios进行数据请求。 首先,HttpClient模块是在`@angular/common/http`包中,因此在使用前需要在项目中导入该模块。在...

    Ajax跨域请求解决方案-JSONP

    然而,Ajax技术在实现动态网页交互时常常需要跨越这个限制,这时就引入了JSONP(JSON with Padding)作为跨域请求的一种解决方案。本文将详细介绍JSONP的工作原理以及如何在ASP.NET网站开发中应用JSONP解决Ajax跨域...

    Angular中的数据请求 内置模块HttpClient实现(get post jsonp 以及第三方模板axios请求数据

    虽然现代浏览器已经支持CORS,但在某些场景下,JSONP仍然有用。使用HttpClient的jsonp方法: ```typescript import { HttpClient, HttpParams } from '@angular/common/http'; jsonCallback = (response: any) => {...

    ajax跨域请求jsonp前后台代码

    基于ajax方式的跨域请求jsonp的前后台代码

    PHP AJAX JSONP实现跨域请求使用范例_ajax如何解决跨域请求

    在这个实例中,我们使用 jQuery 的.ajax() 方法来发送 POST 请求,并指定 dataType 为 jsonp,以便使用 JSONP。 ```javascript $.ajax({ type: "post", url: "ajax.php", dataType: "jsonp", jsonp: "callback...

    利用JQuery jsonp实现Ajax跨域请求json数据

    总结起来,jQuery的jsonp机制使得跨域请求变得简单。通过在客户端设置`dataType: 'jsonp'`和`jsonp: 'callback'`,然后在服务器端根据请求的回调函数参数构建响应,我们可以实现Ajax跨域获取JSON数据。无论是在.Net...

    jsonp跨域请求

    - 只支持GET请求:因为JSONP是基于`<script>`标签实现的,所以只能发起GET请求。 - 安全性较低:服务器返回的代码直接执行在客户端,可能存在XSS(跨站脚本攻击)风险。 - 没有错误处理:如果服务器返回的数据格式不...

    ajax跨域CORS方案 JSONP跨域请求方案.zip

    - JSONP简单易用,无需服务器端特殊配置,但仅支持GET请求,无法处理复杂请求和携带Cookie,安全性也较低。 总的来说,CORS是推荐的现代跨域解决方案,而JSONP在某些特定场景下仍有一定的适用性。理解并合理运用这...

    ajax的js,jq jsonp,的请求方式

    此外,jQuery还提供了简化的`.get()`和`.post()`方法,用于GET和POST请求。 **原生JavaScript的Ajax** 在不使用jQuery的情况下,可以使用原生的XMLHttpRequest对象实现Ajax请求。以下是一个简单的GET请求示例: `...

    jsonp跨域请求数据实现手机号码查询实例分析.docx

    ### JSONP 跨域请求数据实现手机号码查询实例分析 #### 前言 在现代Web开发中,跨域问题一直是前端开发者面临的一个常见难题。简单来说,由于浏览器的同源策略限制,当一个网页尝试从不同的源(即不同的协议、端口...

    学习总结:前端跨域请求的解决办法——JSONP

    2. **支持GET请求**:JSONP仅限于GET请求,但GET请求在很多场景下已经足够。 #### 局限性 1. **只支持GET**:由于JSONP基于`<script>`标签,所以无法发起POST、PUT等其他类型的HTTP请求。 2. **无状态**:JSONP不...

    php版 解决跨域问题CORS ajax+get,post+jsonp例子源代码.zip

    JSONP的基本原理是利用`<script>`标签不受同源策略限制的特性,通过动态创建`<script>`标签来请求数据。服务器返回的不是JSON数据,而是包裹在函数调用中的JSON数据,例如: ```javascript callback({key: 'value'}...

    使用JSONP完成HTTP和HTTPS之间的跨域访问

    在浏览器的同源策略限制下,`XMLHttpRequest`对象不能从不同的域发起请求,而JSONP则是绕过这种限制的一种方法。它的工作原理是动态创建一个`<script>`标签,并将其src属性设置为目标URL,其中目标URL包含了回调函数...

    JSONP解决跨域问题

    JSONP(JSON with Padding)是一种跨域数据交互协议,它利用了`<script>`标签可以跨域请求资源的特性,为了解决JavaScript在浏览器端由于同源策略限制无法直接访问不同源的HTTP请求的问题。在本场景中,前端使用...

    json和jsonp数据格式返回

    - 单向通信:JSONP只能由服务器主动调用客户端指定的函数,不能由客户端发起回调,因此不支持POST等请求方法。 - 无错误处理:如果服务器返回的脚本有误,浏览器通常不会给出任何错误信息。 - 只支持GET请求:JSONP...

    jsonp.pdf文件

    然而,AJAX的核心组件XMLHttpRequest受到同源策略的限制,只能在同一个域名下进行请求。这种限制虽然增强了安全性,但在实际开发中却限制了不同域名间的服务交互能力。例如,在方案中心项目中,为了提供统一的评论...

    jsonp示例2则

    此外,JSONP只能用于GET请求,无法处理POST、PUT等其他HTTP方法,也不支持自定义HTTP头,这在某些情况下限制了它的使用。 总的来说,JSONP是一个简单且实用的跨域解决方案,尤其适用于需要从一个源向另一个源请求...

Global site tag (gtag.js) - Google Analytics