2013-04-15 8 views
34

Jquery'yi kullanarak bir Ajax POST isteği göndermeye çalışıyorum ancak 400 hatalı istek hatası yaşıyorum.Jquery Ajax POST'ta 400 kötü istek hatası alma

$.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); 
    } 
}); 

O Says:

İşte benim kodudur isteğinden kaynak inşa edilemiyor. Neyi eksik?

+0

Ön kontrol: Tarayıcınız http işaret edilmektedir: // localhost: 8080 /, değil mi? –

+1

belki sorun neden olan değil, ama [gibi görünüyor facebook: iş, facebook: severler]] olmalıdır ["facebook: iş", "facebook: seviyor"] – smerny

+0

Belki Java ve Jersey kullanıyor musunuz? –

cevap

75

devam aşağıdaki işlevi kullanarak "verileri" nesneden sorgu inşa etmek gerekir, ben hata var ve nedeni stringify gerek oldu Gönderdiğim JSON verileri. XHR nesnesinde içerik türünü ve veri türünü ayarlamalıyım. Yani doğru sürüm burada:

$.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" 
}); 

o başkası yardımcı olacaktır olabilir.

+4

Başlamak için bunu bulduysam kendimi bir saat boyunca hayal kırıklığına uğramış hata ayıklama yapabilirdim. Teşekkürler;) – bugsduggan

+5

Thomas Edison tarafından bir keresinde söylediği gibi, “Başarısızsın, o saatte işe yaramayacak N yolunu öğrendin” Bu yüzden daha önce bulamadığını ve problemi çözmeye çalıştığın için sevin . – sachinjain024

+1

Bu bana yardımcı oldu. Bu adım neden gerekli? – JasonTS

0

Sen

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; 
    } 

ve sonra Nihayet

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

"sahip" değilsiniz, jQuery sizin için yapmaya çalışacaktır. Yine de, kendiniz inşa ederseniz, olmasını istediğiniz formatta garanti edebilirsiniz. –

+0

Bu şekilde kullanarak Object oluşturmam gerektiğini sanmıyorum. Jquery benim için bu ağır kaldırma işlemini yapıyor. Üstelik, veri POST yöntemi ile gönderildiğinde her zaman kodlanır, böylece gönderilecek veri üzerinde encodeURIComponent kullanılmasına gerek yoktur. – sachinjain024

2

Soru biraz eskidir ... ama birilerinin hata 400'le yüz yüze gelmesi durumunda, csrfToken'i posta isteğine bir parametre olarak gönderme ihtiyacı da olabilir.

Sen şablonunda gemisinden adını ve değerini almak zorunda:

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

ve isteğinize onları geçmesi

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

Kimse Craft CMS'den bahsetmedi mi? –