Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:提交表单规范内容类型_Javascript_Jquery_Forms_Http_Content Type - Fatal编程技术网

Javascript:提交表单规范内容类型

Javascript:提交表单规范内容类型,javascript,jquery,forms,http,content-type,Javascript,Jquery,Forms,Http,Content Type,我使用此代码提交表单 var form = $("#some-form"); form.attr("action", url); form.attr("method", "post"); form.attr('target', '_blank'); form.submit(); 问题是发送的请求具有内容类型:application/x-www-form-urlencoded,它(如上所述)将表单文本区域中的\n字符编码为%0D%0A,在服务器端解码为\r\n,并导致许多问题 我希望服务器接收\

我使用此代码提交表单

var form = $("#some-form");
form.attr("action", url);
form.attr("method", "post");
form.attr('target', '_blank');
form.submit();
问题是发送的请求具有
内容类型:application/x-www-form-urlencoded
,它(如上所述)将表单文本区域中的
\n
字符编码为
%0D%0A
,在服务器端解码为
\r\n
,并导致许多问题

我希望服务器接收
\n
,因此我需要另一种内容类型

因此,问题是:

  • 我应该使用什么内容类型
  • 我应该如何更改javascirpt以使用该内容类型
编辑


我尝试了
enctype=“multipart/form data”
,但它以相同的方式编码新行字符。

使用
xmlHTTPrequest
(AJAX)

它是异步的,并将数据提交到页面。此外,还可以指定标题\n应作为\n到达使用AJAX的服务器上

var request = new XMLHttpRequest;
request.method = "post";
request.open(request.method, [url] , true); //true is asynchronous

//this part here matters. regular form data with charset UTF-8
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded ; charset=UTF-8");
request.setRequestHeader("Connection", "close");

request.onreadystatechange = [trackingfunction]; //You can see which data is returned from the post.

request.send([arg]); //send the post arguments here!
这似乎在我的机器上起作用。将数据保存到文件中,记事本不会将
\n
注册为换行符。当
LF
转换为
CR-LF


唯一的其他内容类型是多部分/表单数据,但用于发布文件。为什么需要在服务器上将换行编码为\n?系统的某些其他组件不接受
\r\n
。即使不是这样,当前的行为也有点糟糕,因为传输组件(HTTP)限制了最终用户的表达能力:用户不能在表单中插入“foo\rbar\r\n”以便服务器接收到确切的值。在我的情况下,AJAX不是一个选项,我想在一个新选项卡中提交表单。@Bartosz Marcinkowski你能帮我澄清一下在新选项卡中提交表单吗?AJAX意味着我的请求是用Javascript构造的,响应是由Javascript处理的。提交表单意味着(在我的例子中)Javascript告诉浏览器提交表单(就像用户单击表单的提交按钮一样),然后响应包含HTML,而不是JSON数据,并且(在我的例子中)浏览器在一个新选项卡中打开收到的HTML。实际上,Ajax最初设计用于接收xml。JSON也是可能的。但是,您可以在服务器上构建一个页面,发送回HTML,并使用AJAX将其加载到一个新选项卡中?通过控制html输出客户端,有效地实现了同样的功能。我必须手动用表单数据填充JSON,并修改服务器端视图以接受JSON而不是POST数据。这是不一样的。