Jquery ajax 在 JSON 中解析对象的 GET 方法

Jquery ajax GET method with an object parse in JSON

感谢您对这种神秘行为发表意见:

此代码有效:

JS代码:

$.ajax({ 
        url: "ajouterEntreeParExcel.ajax.php", // url de la page à charger
        data: {"name":"John","date":"05 & 06 mars"},
        cache: false, // pas de mise en cache
        async: false, 
        contentType : "application/json",
        dataType: "json",
        success:function(jsonRetour){

        },
        error:function(XMLHttpRequest, textStatus, errorThrows){ // erreur durant la requete

        }
    });

和PHP代码:

        $name = $_GET["nom"];
        $date = $_GET["date"];

这个不行

    var dataAjax = {};
    dataAjax["name"] = "John";
    dataAjax["date"] = "05 & 06 mars";
    var entree = JSON.stringify(dataAjax);

    $.ajax({ 
        url: "ajouterEntreeParExcel.ajax.php", // url de la page à charger
        data: entree,
        cache: false, // pas de mise en cache
        async: false, 
        contentType : "application/json",
        dataType: "json",
        success:function(jsonRetour){

        },
        error:function(XMLHttpRequest, textStatus, errorThrows){ // erreur durant la requete

        }
    });

使用相同的 PHP 代码。 在使用 firebug 进行调试时,我检查了变量 "entree",它的格式正确,但我在 PHP 方面没有得到任何东西。

nota : 我更喜欢使用 GET 类型而不是 POST 类型。

有什么想法吗?

这是因为在第一个请求中,您将数据作为 x-www-form-urlencoded 发送,这正是您的 PHP 代码所期望的:

name=John&date=05 & 06 mars

而在第二个中,您在请求中发送 JSON 格式的数据,例如:

'{"name":"John","date":"05 & 06 mars"}'

另请注意,您应该删除 async: false,因为使用它被认为是一种可怕的做法。如果您检查您的控制台,您将看到关于其使用的浏览器警告。

因此,为了让一个版本可以处理对象和给定的响应,此代码有效:

    var dataAjax = {};
    dataAjax["date"] = obj["Date"];
    dataAjax["comite"] = obj["Comité Int.Rég."];


    $.ajax({ 
        url: "ajouterEntreeParExcel.ajax.php", // url de la page à charger
        data: dataAjax,
        cache: false, // pas de mise en cache
        //async: false, 
        //contentType : "application/json",
        dataType: "json",
        success:function(jsonRetour){
            printValueTraitee = printValueTraitee + '<span class="green">OK</span>';
        },
        error:function(XMLHttpRequest, textStatus, errorThrows){ // erreur durant la requete
            printValueTraitee = printValueTraitee + '<span class="red">KO</span>';
        }
    });

所以我不再使用 JSON 格式发送我的数据,而是像一个没有字符串化的对象一样。