2013-04-15 223 views
34

我想使用Jquery發送Ajax POST請求,但我有400個錯誤的請求錯誤。在Jquery Ajax POST中獲取400錯誤的請求錯誤

這裏是我的代碼:

$.ajax({ 
    type: 'POST', 
    url: "http://localhost:8080/project/server/rest/subjects", 
    data: { 
    "subject:title":"Test Name", 
    "subject:description":"Creating test subject to check POST method API", 
    "sub:tags": ["facebook:work", "facebook:likes"], 
    "sampleSize" : 10, 
    "values": ["science", "machine-learning"] 
    }, 
    error: function(e) { 
    console.log(e); 
    } 
}); 

它說:不能要求建設資源。 我錯過了什麼?

+0

初步檢查:您的瀏覽器指向到http://本地主機: 8080 /,對嗎? –

+1

也許不是什麼導致你的問題,但它看起來像[「臉譜:工作,臉譜:喜歡」]應該是[「臉譜:工作」,「臉譜:喜歡」] – smerny

+0

您是否使用Java和澤西也許? –

回答

75

最後,我得到了錯誤,原因是我需要字符串化我發送的JSON數據。我必須在XHR對象中設置內容類型和數據類型。 所以正確的版本是在這裏:

$.ajax({ 
    type: 'POST', 
    url: "http://localhost:8080/project/server/rest/subjects", 
    data: JSON.stringify({ 
    "subject:title":"Test Name", 
    "subject:description":"Creating test subject to check POST method API", 
    "sub:tags": ["facebook:work", "facebook:likes"], 
    "sampleSize" : 10, 
    "values": ["science", "machine-learning"] 
    }), 
    error: function(e) { 
    console.log(e); 
    }, 
    dataType: "json", 
    contentType: "application/json" 
}); 

可能會幫助別人。

+4

如果我發現這一切開始,可以節省一小時沮喪的調試時間。謝謝;) – bugsduggan

+5

正如托馬斯愛迪生曾經說過的那樣,「你沒有失敗,你已經學會了N種方法,在那個時候不起作用」因此,很高興你早點沒有找到它,並試圖自己解決問題。 – sachinjain024

+1

這幫了我。爲什麼這一步是必要的? – JasonTS

0

您需要使用下面的函數從「數據」對象,建立查詢

function buildQuery(obj) { 
     var Result= ''; 
     if(typeof(obj)== 'object') { 
      jQuery.each(obj, function(key, value) { 
       Result+= (Result) ? '&' : ''; 
       if(typeof(value)== 'object' && value.length) { 
        for(var i=0; i<value.length; i++) { 
         Result+= [key+'[]', encodeURIComponent(value[i])].join('='); 
        } 
       } else { 
        Result+= [key, encodeURIComponent(value)].join('='); 
       } 
      }); 
     } 
     return Result; 
    } 

,然後繼續進行

var data= { 
"subject:title":"Test Name", 
"subject:description":"Creating test subject to check POST method API", 
"sub:tags": ["facebook:work, facebook:likes"], 
"sampleSize" : 10, 
"values": ["science", "machine-learning"] 
} 

$.ajax({ 
    type: 'POST', 
    url: "http://localhost:8080/project/server/rest/subjects", 
    data: buildQuery(data), 
    error: function(e) { 
    console.log(e); 
    } 
}); 
+0

你不「擁有」,jQuery將嘗試爲你做。雖然,如果你自己構建它,你可以保證它的格式是你想要的。 –

+0

我不認爲我需要用這種方法來構建Object。 Jquery爲我做了這些繁重的工作。而且,無論何時通過POST方法發送數據,它總是被編碼的,所以我們不需要使用encodeURIComponent來發送數據。 – sachinjain024

2

這個問題有點老......但爲了萬一有人面臨錯誤400,它也可能來自需要發佈csrfToken作爲發佈請求的參數。

您的模板,得到的工藝名稱和值:

<script type="text/javascript"> 
    window.csrfTokenName = "{{ craft.config.csrfTokenName|e('js') }}"; 
    window.csrfTokenValue = "{{ craft.request.csrfToken|e('js') }}"; 
</script> 

,並通過他們在您的要求

data: window.csrfTokenName+"="+window.csrfTokenValue 
+0

沒有人在這裏提到過Craft CMS嗎? –