Javascript 为什么我的Ajax请求会发送;内容类型:application/x-www-form-urlencoded“;当我有数据类型时:";JSON;?

Javascript 为什么我的Ajax请求会发送;内容类型:application/x-www-form-urlencoded“;当我有数据类型时:";JSON;?,javascript,jquery,html,Javascript,Jquery,Html,当我使用以下命令响应按钮单击时,它调用了(通过使用console.log()进行验证),但是,它生成的http请求具有标题“Content-Type:application/x-www-form-urlencoded;charset=UTF-8\r\n”。不应该是json吗 我在Ubuntu上使用google chrome 34.0.1847.132。Jquery版本1.8.3 提前谢谢 function action (mode) { console.log("action calle

当我使用以下命令响应按钮单击时,它调用了(通过使用console.log()进行验证),但是,它生成的http请求具有标题“Content-Type:application/x-www-form-urlencoded;charset=UTF-8\r\n”。不应该是json吗

我在Ubuntu上使用google chrome 34.0.1847.132。Jquery版本1.8.3

提前谢谢

function action (mode) {
    console.log("action called with mode " + mode);
    $.ajax({
      type: "POST",
      url: '/saas.php',
      data: {
          action: (mode == 1)? "start" : "stop"
      },
      dataType: "json",
      success: function(data) {
          //alert(data);
          if (data.msg != null) {
              alert(data.msg);
          } else {
            if (mode == 1) {
                document.getElementById('createLoadGen').innerHTML = 'creating loadGen...';
                setTimeout(checkStatus, 1000);
            }
          }
      }
    });
    if (mode == 2) {
        document.getElementById('createLoadGen').innerHTML = '<button onclick="action(1)" >create LoadGen</button>';
        document.getElementById('deleteLoadGen').style.display = 'none'
    }
}
功能动作(模式){
log(“使用模式调用的操作”+模式);
$.ajax({
类型:“POST”,
url:“/saas.php”,
数据:{
操作:(模式==1)?“开始”:“停止”
},
数据类型:“json”,
成功:功能(数据){
//警报(数据);
如果(data.msg!=null){
警报(data.msg);
}否则{
如果(模式==1){
document.getElementById('createLoadGen')。innerHTML='creating loadGen…';
设置超时(检查状态,1000);
}
}
}
});
如果(模式==2){
document.getElementById('createLoadGen')。innerHTML='createLoadGen';
document.getElementById('deleteLoadGen')。style.display='none'
}
}

一般来说不是。请求中的内容类型标头描述请求正文中的内容,而不是响应中预期的内容类型(描述预期响应格式是
Accept
标头的工作)

默认情况下,jQuery将使用HTML表单使用的标准编码对数据进行编码

现在,服务器可能希望将请求格式化为JSON,在这种情况下,您需要对jQuery调用进行以下修改:

  • 假设您正在发送JSON
  • 将发送的内容编码为JSON,而不是让jQuery自己编码
  • 例如:


    sass.php
    将不得不这样做,而不是让php在后台不可见地进行操作,而只是从
    $\u POST

    中提取数据,这将混淆两件事。application/x-form只是MIME类型。这就像是用来发送数据的标准。Json是一种以mime类型发送和包装的数据格式。另外,我建议您查看jquery手册。数据类型不定义数据的发送方式。它只是告诉jquery您希望一个JSON字符串作为答案。@newee-Err
    application/x-www-form-urlencoded
    application/json
    是用于描述不同类型内容的不同MIME类型。发送用URL编码的数据包装的JSON是不明智的,但是他没有发送JSON格式的数据。因此mime类型是好的。通常情况下,阅读实际上是有帮助的:“
    dataType
    :您期望从服务器返回的数据类型。如果未指定任何类型,jQuery将尝试根据响应的mime类型来推断它[…]”感谢@Quentin和其他人的评论和回答此问题!这真的很有帮助。谢谢你的解释。一直在寻找一个设置AJAX语法属性的示例,您的示例恰好显示了格式语法应该传递到
    JSON.stringify()
    然后传递到AJAX的确切内容。我在网上找到的其他示例将
    JSON.stringify()
    的内容用单引号和双引号括起来,并且在将
    System.String
    转换为
    Generic.IDictionary时总是会出错。
      data: JSON.stringify({
          action: (mode == 1)? "start" : "stop"
      }),
      contentType: "application/json",