如何使用jQuery发送JSON而不发送原始查询的POST?

时间:2019-01-21 15:07:56

标签: jquery html json

我有以下HTML。它应该对服务器执行POST(在下面的MWE中,我只是通过cnn.com完成的。)

但是,它并没有达到我的期望,即以JSON格式格式化POST请求。相反,它给出以下内容

x1=y1&x2=y2

作为请求正文

它应该给出类似的内容

{ "x1": "y1", "x2": "y2"}

使服务器正确响应。

代码如下:

  <!-- jQuery Version 1.11.0 -->
    <script src="js/jquery-1.11.0.js" }}"></script>

    <!-- Bootstrap Core JavaScript -->
    <script src="js/bootstrap.min.js" }}"></script>

    <!-- Plugin JavaScript -->
    <script src="js/jquery.easing.min.js" }}"></script>
    <script src="js/classie.js" }}"></script>
    <script src="js/cbpAnimatedHeader.js" }}"></script>

    <!-- Contact Form JavaScript -->
    <script src="js/jqBootstrapValidation.js" }}"></script>
<!--
     <script src="js/contact_me.js" }}"></script>
    -->

    <!-- Custom Theme JavaScript -->
    <script src="js/freelancer.js" }}"></script>


<form action="" method="post" name="demoform" id="demoform">

<input type=hidden name=x1 value=y1 id=x1>
<input type=hidden name=x2 value=y2 id=x2>

<input type="button" value="demo" name="button" id="button">

</form>



<script>
 $.sendRequest = function(form) {
                                $.ajax({
                                        type: "POST",
                                        url: "http://www.cnn.com",
                                        data: form.serialize(),
                                        dataType: 'application/json',

                                        success: function(data, textStatus){
                                        }
                                });
   }

 $('#button').click(function () {
                                $.sendRequest($("#demoform"));
                        });
</script>

请注意,我想做的事情等同于:

curl -X POST "https://www.cnn.com" -H  "accept: application/json" -H  "Content-Type: application/json" -d "{  \"x1\": \"y1\", \"x2\": \"y2\"}"

编辑:我会注意到,当我在浏览器中执行“检查”并检查请求标头时,它们不是预期的,它们还有很多其他东西,而诸如内容类型之类的东西都不是:application /我在以下评论后添加的json。 (而是显示内容类型:text / html)。我不确定为什么它会完全忽略我的标题。

1 个答案:

答案 0 :(得分:2)

<DataGridTextColumn x:Name="TagCycle" Header="Cycle" 
                                Binding="{Binding Mode=TwoWay, Path=RawTag.Cycle, UpdateSourceTrigger=PropertyChanged, NotifyOnSourceUpdated=True, NotifyOnTargetUpdated=True, NotifyOnValidationError=True, ValidatesOnNotifyDataErrors=True, ValidatesOnDataErrors=True, ValidatesOnExceptions=True}" 
                                ElementStyle="{StaticResource ResourceKey=textBlockErrStyle}">
    <DataGridTextColumn.CellStyle>
        <Style >
            <Setter Property="FrameworkElement.HorizontalAlignment" Value="Stretch"/>
            <Setter Property="TextBlock.TextAlignment" Value="Right"/>
        </Style>
    </DataGridTextColumn.CellStyle>
</DataGridTextColumn>

dataType描述了您希望从服务器接收 且不采用MIME类型的格式。

contentType描述您要发送的格式。

将其更改为:

dataType: 'application/json',

dataType: "json",
contentType: "application/json",

此功能URL将数据编码为表单。您需要构造一个对象并将其转换为JSON。

data: form.serialize(),