Javascript 我无法阻止AJAX转义我传递的请求正文

Javascript 我无法阻止AJAX转义我传递的请求正文,javascript,ajax,Javascript,Ajax,我需要将JSON请求传递给服务器,但AJAX会转义我传递的每个字符。我不要这个 例如,如果我传递一个空对象 {} 服务器收到了转义序列 %7B%7D= 我的AJAX调用是: $.ajax({ url: 'http://my-server-name.com:8002/store_test', dataType: 'text', data: "{}", processData: false, type: 'POST', success: fu

我需要将JSON请求传递给服务器,但AJAX会转义我传递的每个字符。我不要这个

例如,如果我传递一个空对象

{} 
服务器收到了转义序列

%7B%7D=
我的AJAX调用是:

  $.ajax({
    url: 'http://my-server-name.com:8002/store_test',
    dataType: 'text',
    data: "{}",
    processData: false,
    type: 'POST',
    success: function(data) {
      console.log(data);
    }
  });

如何禁用此转义?

您需要将“processData”设置为true,并且您还需要不加引号和不分配“dataType”

将“dataType”设置为“text”将强制jQuery传递纯文本字符串

以下是您应该如何传递数据的示例:

  var post_data = {foo: "BAR", lorem: "ipsum"};
  $.ajax({
    url: 'http://my-server-name.com:8002/store_test',
    data: post_data,
    type: 'POST',
    success: function(data) {
      console.log(data);
    }
  });

尝试使用jquerypost

$.post("http://my-server-name.com:8002/store_test", { 
        //Your post data
       //data:"hi",
    })
    .done(function(data) {
         console.log(data);

    }).fail(function() {
    alert( "error" );
    });

我终于解决了这个问题

第一个问题是CORS限制的一部分。在大多数情况下,将“访问控制允许原点”设置为“*”就足够了。但在这种情况下(发布JSON正文),需要一些额外的标题。下面是用于设置所有这些参数的Java代码:

response.setHeader( "Access-Control-Allow-Origin", "*" );
response.setHeader( "Access-Control-Allow-Headers", "origin, content-type, accept" );
response.setHeader( "Access-Control-Allow-Credentials", "true" );
问题的另一部分是AJAX请求。以下是工作代码:

var post_data = JSON.stringify({foo: "BAR"});
$.ajax({
    success: function(data) {
      console.log(data);
    },
    error: function( jqXHR, textStatus, errorThrown ){
         alert( "error  while making ajax call. Error parameters are, " +
               "\ntextStatus: " + textStatus +
               ";\n errorThrown: " + errorThrown +
               ";\n jqXHR: " + JSON.stringify(jqXHR) );
    },     
    url: ajax_url,
    data: post_data,
    contentType: 'test/json',
    type: "POST"
});
附言#1提供的代码经过Firefox、Chrome和Internet Explorer浏览器测试,运行良好。
P.S.#2 java代码的最佳位置是过滤器。

它应该是
data:{}
(不带引号)。它是一个对象,而不是字符串。如果我不使用引号,则发送到服务器的正文是空的。我需要传递真实数据,{}只是一个避免默认转义的测试。还有其他想法吗?对于发送和接收的数据,开发人员控制台会给你什么?@joro-这是因为只发送
{}
是一个空对象-也就是说,什么都没有。如果您发送一个非空对象,那么请求将不会为空。它将返回POST 500服务器错误。这是正常的,因为服务器无法处理请求。但是服务器记录了以下内容:[13:17:03846]INFO xxx.HomeController-收到的正文:%7B%7D=如果我以这种方式发送,则请求正文为空。若我传递数据:{'z':'a'},服务器将收到“z=a”。但我需要引号,所以我不确定服务器端接收到的正文是什么?我刚刚发现您甚至不必设置数据类型。请参见上面的update.INFO zzz.HomeController-received body:foo=BAR&lorem=ipsum->no quotes in my sideso您的问题得到了回答?嗨,朋友,我有以下代码:var post_data={foo:“BAR”,lorem:“ipsum”};$。post(“,post_数据);结果是相同的正文没有引号。任何东西都会使URL在我传递的所有内容上转义:(请检查您的服务器文件是否打印此字符。将该文件另存为UTF-8Symbols“{”和“}”'不仅是UTF8字符,而且是ASCII字符,因此编码没有问题。但是修改了服务器以打印请求正文的长度,我得到了确切的值19:HomeController-received body:foo=BAR&lorem=ipsum;length=19我对你的答案的第一条评论是代码的结果,你已经发布了。请阅读我给你写的内容。你是否包括了在页面中