PHP $ HTTP_RAW_POST_DATA VAR doldurmak için POST veri göndermek için jQuery nasıl?

2 Cevap php

Bazı eski kod kadar düzenli çalışıyorum.

Aşağıdaki ajax isteği yapar kodun ana bölümden aşağı bir kesim var:

var xmlHttp;
    try {
    // Firefox, Opera 8.0+, Safari
            xmlHttp=new XMLHttpRequest();
    } catch (e) {
    // Internet Explorer
            try {
            xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                    try {
                            xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
                    } catch (e) {
                            $j.prompt("Your browser does not support AJAX!");
                    return;
                    }
            }
    }
    xmlHttp.onreadystatechange=function(){
            if(xmlHttp.readyState==4){
            // Get the data from the server's response
                // returns json data
                  //i know, don't ask
                eval(xmlHttp.responseText);

                // doing stuff with the json data
                ...
                etc
            }
    }
    xmlHttp.open("POST","fetchData.php",true);

    //sample data passed
    var request ="51.5&-0.12";
    xmlHttp.send(request);

Ben dönüştürmek için çalışıyorum:

    $j.ajax({
        type: "POST",
        url: "fetchData.php",
        success: function(data) {
            mapFn._showSidebarHotels(data);
        },
        cache: false,            
        data: "51.5&-0.12",
        dataType: "json",
        processData: false
    })

Eski kod eski backend kodu (Ben değiştirmek için değil tercih) kullandığı $ HTTP_RAW_POST_DATA VAR doldurur.

Jquery çağrısı kullanırken, $ HTTP_RAW_POST_DATA nüfuslu ve garip ne $ _POST [] yanı empty gibi görünüyor olduğunu almak için görünmüyor.

Ben iki ajax aramaları karşılaştırarak firebug POST sekmesinde fark jquery versiyonu eski çağrı değil gibi başka bilgi olarak "application / x-www-form-urlencoded" sahip olduğunu fark ettim.

Ben sorun aşağı jquery ajax isteği ile gönderilen başlıkların türüne olduğuna inanıyorum ama ben bu kullanarak jquery işleyebilirsiniz nasıl daha fazla emin değilim.

Benim sorular şunlardır:

  • Benim jquery çağrısı doğru mu? Ben boş bir $ post dizi var Verilen
  • Nasıl jquery parametreleri kullanılarak $ HTTP_RAW_POST_DATA mı?

2 Cevap

Gönderilmeden önce veri bir sorgu dizesi dönüştürülür. Bu işlem false ProcessData ayarlayarak atlatılabilir.

Örnek:

Sunucuya veri olarak bir xml belgeyi gönderir. False ProcessData seçeneği ayarlayarak, dizeleri veri otomatik dönüşüm önlenir.

var xmlDocument = [create xml document];
$.ajax({
  url: "page.php",
  processData: false,
  data: xmlDocument,
  success: handleResponse
});

Yani içerik türünü değiştirmek için denemek mi? (Eğer eski çağrı içerik türünü sağlamak yoktu demek gibi) belki de boş bir dizeye eşit ayarlama?

Sunucu ham post veri json olmasını bekliyordum nerede benzer bir sorunu vardı. 'Application / json' için içerik türünü değiştirdikten sonra iyi çalıştı.