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);
}
});
It Says:リクエストからリソースを構築できません。私は何が欠けていますか?
最後に、間違いを見つけました。その理由は、送信する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"
});
他の誰かを助けるかもしれません。
質問は少し古いですが...誰かがエラー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
次の関数を使用して、「データ」オブジェクトからクエリを作成する必要があります
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);
}
});
はい。データを識別できないため、stringify
the JSON
data orlse 400 bad request
エラーが発生する必要があります。
400 Bad Request
要求の形式が正しくありません。ブラウザが、このサーバーが理解できないリクエストを送信しました。
さらに、content type
とdatatype
も追加する必要があります。そうでない場合は、415
というUnsupported Media Type
エラーが発生します。
415サポートされていないメディアタイプ
これを試して。
var newData = {
"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"]
};
var dataJson = JSON.stringify(newData);
$.ajax({
type: 'POST',
url: "http://localhost:8080/project/server/rest/subjects",
data: dataJson,
error: function(e) {
console.log(e);
},
dataType: "json",
contentType: "application/json"
});
この方法で、必要なデータを簡単に変更できます。 ajaxブロックの外側で定義されているので、混乱することはありません。