我注意到在jquery中使用$ .post()时默认的contentType是application/x-www-form-urlencoded - 当我的asp.net mvc代码需要有contentType = application/json
(请参阅此问题,为什么我必须使用application/json:ASPNET MVC - 为什么ModelState.IsValid为false"当该字段确实有值时,x字段是必需的?)
如何使$ .post()发送contentType = application/json?我已经有了大量的$ .post()函数,所以我不想改成$ .ajax(),因为它需要花费太多时间
如果我试试
$.post(url, data, function(), "json")
Run Code Online (Sandbox Code Playgroud)
它仍然有contentType = application/x-www-form-urlencoded.那么如果"json"参数没有将contenttype更改为json,那究竟该做什么呢?
如果我试试
$.ajaxSetup({
contentType: "application/json; charset=utf-8"
});
Run Code Online (Sandbox Code Playgroud)
这有效但影响我拥有的每一个$ .get和$ .post并导致一些破坏.
那么有什么方法可以改变$ .post()的行为来发送contentType = application/json?
我已经在这个问题上工作了几天,并在这个论坛上伸出手,因为我觉得我已经筋疲力尽了.我有一个在Drupal 7网站上托管的表单,需要将表单值提交给外部URL.该表单通过jQuery.AJAX使用HTTPS协议的POST请求
SCRIPT7002:XMLHttpRequest:网络错误0x2ef3,由于错误00002ef3无法完成操作
我尝试过以下方法:
添加contentType:
// causes all of the jQuery callbacks to error out
"application/json; charset=utf-8",
Run Code Online (Sandbox Code Playgroud)在实际POST之前尝试Ajax GET调用(如另一个SO线程所示)
添加header( 'Content-Type: application/json; charset=utf-8' );到请求中
组 crossDomain: true
添加了适当的CORS标头,并在下面粘贴表单代码:
$.ajax({
url: "[URL]", //the page to receive the form data
crossDomain: true,
type: "POST",
data: dataString, //posting to API
dataType: "json", //the data type the function should expect back from the server
success: function(data) {
if (data.response_status == "1") { //error for at least 1 field …Run Code Online (Sandbox Code Playgroud) SCRIPT7002:XMLHttpRequest:网络错误0x2ef3,由于错误00002ef3无法完成操作
目前没有有效的解决方案.
更新:也在IE11上注意到.
经过越来越多的调查,我得到了这样的结果:
我的问题是:
现在,我正在做的临时解决方案是,如果HTTP状态代码为零,则只重试最多3次.但它非常难看,因为即使上传请求有时也会失败,并且对于那些重试的请求变得缓慢,有时需要额外的100毫秒.
重现步骤:
我的IE版本:
现在我正在解决它,如果browser is IE10&& Request is POST&& 重试最多3次HTTP status code is 0.
如果有人可以帮我删除我丑陋的解决方案,我将不胜感激,因为有了这样的解决方案,即使请求进入服务器并且它返回0我也会重试(我试图通过测量xhr.send之间的时间来避免这种情况)和它的回调但它不可靠),如果IE10在comptMode中,如果IE11有同样的问题,添加到那个性能,它将占用我的机器〜每次重试之间的170ms.
我有一个非常简单的ajax请求(见下文).该服务器使用CORS,在IE 10 +,Chrome,Firefox和Opera中运行良好.但是,在Microsoft Edge上,它失败了
XMLHttpRequest:网络错误0x80070005,访问被拒绝.
我已经在这里,这里,这里和这里研究了这些帖子,但找不到有效的答案.那些人在使用IE时遇到了问题,但添加了contentType(此get不需要)和crossDomain使其工作正常.
CanIUse似乎表明CORS在Edge中可用.IE9关闭时请求也失败了,但是CanIUse只声明对CORS的部分支持,所以这是可以理解的.
有什么想法我可以解决这个问题吗?
码:
$.ajax({
crossDomain: true,
url: "http://localhost:2023/api/DoAction/test",
success: function (a) {
var res = JSON.parse(a);
alert(res.content);
},
error: function (a, e, r) {
alert(a.responseText);
}
});
Run Code Online (Sandbox Code Playgroud)
更新
要提供更多信息,以防它提供任何线索--ajax请求来自Azure并发布到使用OWIN自托管创建的localhost网站.这是不寻常的,但软件(只能在本地使用)需要从云服务获取数据.如上所述,它适用于所有其他浏览器,Edge是唯一的问题.
这个问题让我疯了.我们的网络应用程序使用HTTP POST登录用户,现在IE 10正在中止连接并说:
SCRIPT7002: XMLHttpRequest: Network Error 0x2f7d, Could not complete the operation due to error 00002f7d.
Run Code Online (Sandbox Code Playgroud)
以下是我的所有细节
截屏:
网络流量:

证书很好:

任何帮助是极大的赞赏.我花了很多时间没有运气.正如您所料,这在Chrome和Firefox中运行良好.如果您需要更多有关正在发生的事情的详细信息,请告诉我们.
谢谢,
我已经从富脸3.3升级到富脸4.2因为ajax不能用于IE9.现在它仍然不起作用.
在收到响应之后IE获得了一个JS错误"SCRIPT58734:Der Vorgang konnte aufgrund des folgenden Fehlers nicht fortgesetzt werden:c00ce56e." 在尝试时
data.responseText=request.responseText
Run Code Online (Sandbox Code Playgroud)
在jsf.js.html?ln = javax.faces&conversationContext = 2,第1行第21747行
我认为这是因为一个不完整的HTTP标头
Content-Type: text/xml;charset=UTF8
Run Code Online (Sandbox Code Playgroud)
应该
Content-Type: text/xml;charset=UTF-8
Run Code Online (Sandbox Code Playgroud)
这是服务器的原始响应
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-Powered-By: JSF/2.0
Cache-Control: no-cache
Content-Type: text/xml;charset=UTF8
Content-Length: 293
Date: Tue, 17 Apr 2012 15:25:22 GMT
<?xml version='1.0' encoding='UTF8'?>
<partial-response><changes><update id="outtest"><![CDATA[<span id="outtest"><span class="outhello">Hello !</span></span>]]></update><update id="javax.faces.ViewState"><![CDATA[2809980525147413088:295565165947012503]]></update></changes></partial-response>
Run Code Online (Sandbox Code Playgroud)
我正在使用
javaee-web-api 6
myfaces-orchestra-core 1.4
Hibernate 4.1
Spring 3.1.1
Richfaces 4.2.0
Primefaces 3.2
jsf-api+impl 2.1.7
Run Code Online (Sandbox Code Playgroud)
jstl 1.2
并在tomcat 7上运行
编辑:现在我确定它的标题.我在charles-proxy中设置了一个断点并手动编辑了响应头,编辑后的http头IE9显示了正确的结果,没有任何错误
我有一个页面的HTML和Angularjs文件.
App.js
angular
.module('vod', [])
.controller('moviesController', ['$http', function ($http) {
var self = this;
self.movies = [];
$http.get('http://localhost:8080/movies/').then(function (response) {
self.movies = response.data;
}, function (errResponse) {
console.error('Error while fetching movies');
});
}]);
Run Code Online (Sandbox Code Playgroud)
HTML
<!DOCTYPE html>
<html>
<head>
<title>Angular</title>
<script src="angular.min.js"></script>
<script src="app.js"></script>
</head>
<body ng-controller="moviesController as ctrl"
ng-app="vod">
<div ng-repeat="movie in ctrl.movies">
<span ng-bind="movie.title"></span>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
它运作良好,在Chrome制作电影的标题,但给人的错误
SCRIPT7002: XMLHttpRequest: Network Error 0x2, The system cannot find the file specified
和
SCRIPT7002: XMLHttpRequest: Network Error 0x2efd, Could not complete …
我的问题是在通过子域访问页面时使用GWT 2.6.1时发生臭名昭着的"StatusCodeException:0"问题.https://sub.site.com/
现在,这种情况相当零星的一个客户使用IE11和我不能重现使用IE11,IE10,IE9还是IE8(不谈论Chrome或Firefox)几个不同的计算机上这一点.
从中访问完全相同的webapp https://site.com/似乎对该客户起作用.
这显然让我得出结论,我在同源策略方面遇到了问题.
但奇怪的是,我的webapp的设计方式是没有跨域或跨子域请求.这同样适用于无交叉协议以及无交叉端口的请求.换句话说,在这种情况下不违反同源政策.作为对此的确认,我可以提供以下证据:
在客户现场我已经看到了如何重现:客户开始使用应用程序,一切正常 - 所有请求都正常返回响应.然后,经过几分钟的工作,同一页面上的完全相同的请求(没有重新加载)开始失败,并显示StatusCodeException:0.
基本上,无论是https://sub.site.com和https://site.com指向同一个IP,并有只有一个Tomcat的web应用程序正是服务于相同的资源两个https://sub.site.com和https://site.com.
另一个证明是单个GWT模块本身的代码库:在那里我只使用一个服务的一个实例DashboardService:
public class DashboardModule extends EntryPoint implements IDashboardModule {
private final DashboardServiceAsync dashboardService = createDashboardService();
@Override …Run Code Online (Sandbox Code Playgroud)