SORU
18 Kasım 2008, Salı


Nasıl çapraz etki alanı JavaScript ile POST isteği gönderebilirim?

Nasıl çapraz etki alanı JavaScript ile POST isteği gönderebilirim?

Notlar - sayfayı yenilemek olmamalı kapmak ve yanıt sonra ayrıştırmak gerekiyor.

Bazı kod örnekleri ile bir yardım çok takdir edilecektir.

CEVAP
30 EYLÜL 2011, Cuma


Güncelleme:Devam etmeden önce herkesin ve KÖŞELERİ html5rocks tutorial okumalı ve anlamalıdır. Anlaşılması kolay ve çok açıktır.

Eğer sunucu yayınlanmadan, sadece "Çapraz Kökeni Kaynak Paylaşımı standart" sunucu yanıt başlıklarını ayarlayarak. kaldıraç kontrol Bu cevap çok net bence bu konuyu, ama diğer cevaplar ele alınmıştır.

Sen to.com/posthere.php (örnek olarak PHP kullanarak) from.com/1.html çapraz etki alanı POST yapmak ne kadar kısa burada. Not: sadece OPTIONS OLMAYAN istekleri için *2 set* - bu örnek, her zaman küçük bir kod parçası için. tüm başlıkları ayarlar

  1. Posthere.php Kur aşağıdaki:

    switch ($_SERVER['HTTP_ORIGIN']) {
        case 'http://from.com': case 'https://from.com':
        header('Access-Control-Allow-Origin: '.$_SERVER['HTTP_ORIGIN']);
        header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');
        header('Access-Control-Max-Age: 1000');
        header('Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-With');
        break;
    }
    

    Bu komut SONRASI, çapraz etki alanı ve SEÇENEKLERİ sağlar. Bu okumaya devam ederken belli olacak...

  2. JS (jQuery örnek) çapraz etki alanı yazınızı Kur:

    $.ajax({
        type: 'POST',
        url: 'https://to.com/postHere.php',
        crossDomain: true,
        data: '{"some":"json"}',
        dataType: 'json',
        success: function(responseData, textStatus, jqXHR) {
            var value = responseData.someKey;
        },
        error: function (responseData, textStatus, errorThrown) {
            alert('POST failed.');
        }
    });
    

""Sunucuya yöntemi SEÇENEKLERİ adım SONRASI 2, tarayıcınızın gönderir yaptığınızda Bu "" sunucu ile serin olup olmadığını görmek için tarayıcı tarafından size Gönderme. koklar. Sunucu yanıt verir "Access-Control-Allow-Origin" söylüyor tarayıcısına TAMAM POST|GET|KÖKENİ ise talep kaynaklı "http://from.com" veya "https://from.com". Sunucuda sorun olduğu için, tarayıcı 2. bir istek (bu sefer bir POST) yapar. Müvekkiliniz de izin gerekir bu yüzden gönderme - içerik türünü ayarlamak için iyi bir uygulamadır.

MDN harika bir rapor tüm akışını nasıl çalıştığını ayrıntılı anlatır HTTP access control yaklaşık vardır. Onların docs göre, gereken "destekleyen tarayıcılarda çalışacak cross-site XMLHttpRequest". Bu biraz yanıltıcı ancak, benim gibiDÜŞÜNÜYORUMsadece modern tarayıcılar etki SONRASI çapraz izin verir. Sadece safari,chrome,FF 3.6 ile bu işleri doğrulandı.

Eğer bunu yaparsanız unutmayın aşağıdaki:

  1. Sunucu işlem başına 2 istekleri işlemek gerekir
  2. Güvenlik üzerindeki etkileri hakkında düşünmek gerekir. Gibi bir şey yapmadan önce dikkatli olun 'Access-Control-Köken İzin ver:' . *
  3. Bu alışkanlık mobil tarayıcılarda çalışır. Benim durumumda cross domain POST hiç izin vermiyor. Android, iPad, iPhone test ettim
  4. Orada çok büyük bir hata FF < 3.6 nerede olursa sunucu işlevi olmayan 400 yanıt Kodu VE orada bir yanıt gövdesi (doğrulama hataları için örnek), FF 3.6 alışkanlık olsun yanıt vücut. Bu cant iyi bir DİNLENME uygulamaları kullanmak beri tam bir baş belası. Hata here (eğe altında DV ama benim tahminim bir FF kendi hata - FF4 sabit gibi görünüyor).
  5. Her zaman yukarıda, sadece SEÇENEK istekleri başlıklarını döndürür. FF post'tan yanıt gerekiyor.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jabari Johnson

    Jabari Johns

    18 Ocak 2008
  • SuperPrincessjo

    SuperPrinces

    1 EKİM 2010
  • TheRightTire

    TheRightTire

    14 EKİM 2009