2014-03-24 48 views
0

我需要將JSON請求傳遞給服務器,但AJAX會轉義我傳遞的每個字符。我不想要這個。我無法停止轉義請求正文的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); 
    } 
    }); 

我怎麼能禁用這逃避?

+7

它應該是'data:{}'(不含引號)。它是一個對象,而不是一個字符串。 – putvande

+0

如果我沒有引用它,身體發送到服務器是空的。我需要傳遞真實數據,「{}」只是一種避免默認轉義的測試。任何其他想法? – joro

+0

開發者控制檯爲發送和接收的數據提供了什麼內容? – atmd

回答

0

我終於解決了這個問題。

第一個問題是CORS限制的一部分。在大多數情況下,將「Access-Control-Allow-Origin」設置爲「*」就足夠了。但在這種情況下(發佈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" 
}); 

P.S. #1所提供的代碼已經過Firefox,Chrome和Internet Explorer瀏覽器的測試,並且工作正常。 P.S. #2 java代碼的最佳位置在過濾器中。

0

你需要「過程數據」設置爲真正,你也需要沒有引號和不分配「的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); 
    } 
    }); 
+0

如果我發送這個方式,請求的主體是空的。如果我傳遞數據:{'z':'a'},服務器收到「z = a」。但我需要引號,所以對我來說不行 – joro

+0

我剛測試過這個解決方案 - 它工作正常。 – nils

+0

服務器端收到的是什麼內容? – joro

0

嘗試使用jQuery帖子。

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

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

Hi pal, 我有這段代碼: var post_data = {foo:「BAR」,lorem:「ipsum」}; $ .post(「http://svn.nasv.in:8002/store_test2」,post_data); 結果是沒有引號的同一個主體。任何東西都會導致URL在我通過的所有內容上都轉義:( – joro

+0

Plz請檢查您的服務器文件是否打印此字符。將該文件另存爲UTF-8 –

+0

符號'{'和'}'不僅是UTF8字符,而且ASCII也是,是不是問題,但修改服務器打印請求正文的長度,我得到的確切值19:HomeController - 收到正文:foo = BAR&lorem = ipsum; length = 19 – joro