SORU
17 Mart 2012, CUMARTESİ


Olamaz 'application/json' bir WordPress kullanmak için-içerik türü ayarlayın.ajax

Bu kod var

$.ajax({
    type: 'POST',
    //contentType: "application/json",
    url: 'http://localhost:16329/Hello',
    data: { name: 'norm' },
    dataType: 'json'
});

Fiddler raw isteği üzerine görebiliyorum

POST http://localhost:16329/Hello HTTP/1.1
Host: localhost:16329
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://localhost:14693/WebSite1/index.html
Content-Length: 9
Origin: http://localhost:14693
Pragma: no-cache
Cache-Control: no-cache

name=norm

Ama çalışıyorum ne tip içerik ayarlamaktırapplication/x-www-form-urlencodediçinapplication/json. Ama bu kod

$.ajax({
    type: "POST",
    contentType: "application/json",
    url: 'http://localhost:16329/Hello',
    data: { name: 'norm' },
    dataType: "json"
});

Oluşturur tuhaf istek Kemancı olarak görüyorum

OPTIONS http://localhost:16329/Hello HTTP/1.1
Host: localhost:16329
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2
Accept: text/html,application/xhtml xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Origin: http://localhost:14693
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type
Pragma: no-cache
Cache-Control: no-cache

Bu yüzden mi? YAZI orada olması gereken SEÇENEKLER nelerdir? Ve uygulama/içerik-türü benim json mi? Ve istek parametreleri nedense gitti.

GÜNCELLEME 1

Sunucu tarafında çok basit Dinlendirici bir hizmeti var.

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class RestfulService : IRestfulService
{
    [WebInvoke(
        Method = "POST",
        UriTemplate = "Hello",
        ResponseFormat = WebMessageFormat.Json)]
    public string HelloWorld(string name)
    {
        return "hello, "   name;
    }
}

Ama nedense parametreleri ile bu yöntem diyemem.

GÜNCELLEME 2

Bu kadar uzun cevap vermediğim için özür dilerim.

Benim sunucu yanıt için bu başlıkları ekledim

 Access-Control-Allow-Origin: *
 Access-Control-Allow-Headers: Content-Type
 Access-Control-Allow-Methods: POST, GET, OPTIONS

Ben yardım etmediYöntem yapılamazsunucu hatası.

Kemancım ne diyor burada

enter image description here

Şimdi benim server kabul ettiğinden emin olabilirimPOST, GET, SEÇENEKLEReğer yanıt başlıkları beklediğim gibi çalışırlar. Ama neden "Yöntemi izin verilmez"?

Sunucudan yanıt (bkz . web görünümü içinde ^em>Hamyukarıdaki resim üzerinde yanıt bu gibi görünüyor

enter image description here

CEVAP
18 Mart 2012, Pazar


Url seçeneği http:// kaldırma doğru HTTP POST Başlığı gönderildiği sağlar gibi görünüyor.

Ben tam ana bilgisayar adını hak kazanmak için gereken, sadece aşağıdaki gibi göreli bir URL kullanabilirsiniz düşünüyorum.

   $.ajax({
      type: "POST",
      contentType: "application/json",
      url: '/Hello',
      data: { name: 'norm' },
      dataType: "json"
   });

Çalışan benim için bir örnek:

        $.ajax({
            type: "POST",
            url: siteRoot   "api/SpaceGame/AddPlayer",
            async: false,
            data: JSON.stringify({ Name: playersShip.name, Credits: playersShip.credits }),
            contentType: "application/json",
            complete: function (data) {
            console.log(data);
            wait = false;
        }
    });

Muhtemelen ilgili: jQuery $.ajax(), $.post sending "OPTIONS" as REQUEST_METHOD in Firefox

Düzenleme: Biraz daha araştırma yaptıktan sonra SEÇENEKLER başlığı ise, kaynak etki alanından talep etmiş olup olmadığını öğrenmek için kullanılır öğrendim. Fiddler kullanarak, yanıtı şu benim sunucudan başlıklarını ekledim.

 Access-Control-Allow-Origin: *
 Access-Control-Allow-Headers: Content-Type
 Access-Control-Allow-Methods: POST, GET, OPTIONS

Tarayıcı bu yanıtı aldıktan sonra daha sonra json veri ile doğru POST isteği gönderdi. Varsayılan içerik türü güvenli olarak kabul edilir-urlencoded formu gibi görünüyor ve bu yüzden ekstra çapraz etki alanı denetler tabi değildir.

Sunucularınız için daha önce de belirttiğim başlıkları SEÇENEKLER isteğine yanıt eklemek gerekir gibi görünüyor. Elbette onları belirli alanlar isteklerini yerine tüm izin verecek şekilde yapılandırmanız gerekir.

Aşağıdaki jQuery bunu test etmek için kullandım.

$.ajax({
   type: "POST",
   url: "http://myDomain.com/path/AddPlayer",
   data: JSON.stringify({
      Name: "Test",
       Credits: 0
   }),
   //contentType: "application/json",
   dataType: 'json',
   complete: function(data) {
       $("content").html(data);
  }
});​

Referanslar:

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • André Frizzo

    André Frizz

    16 Aralık 2006
  • Engadget

    Engadget

    18 EYLÜL 2006
  • FD2097

    FD2097

    21 HAZİRAN 2009