如何让Jquery发送POST数据来填充PHP中的$ HTTP_RAW_POST_DATA var?

时间:2010-02-10 13:04:09

标签: php jquery ajax

我正在尝试整理一些遗留代码。

以下是执行ajax请求的代码的主要部分:

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

我正在尝试转换为:

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

遗留代码填充$ HTTP_RAW_POST_DATA var,遗留后端代码(我不想更改)使用。

使用jquery调用时,$ HTTP_RAW_POST_DATA似乎没有填充,奇怪的是$ _POST []似乎也是为空

我注意到,在比较两个ajax调用时,firebug的POST选项卡的不同之处在于,jquery版本将“application / x-www-form-urlencoded”作为遗留调用不存在的进一步信息。

我认为问题在于使用jquery ajax请求发送的标头类型,但我不确定如何使用jquery操作这些标头。

我的问题是:

  • 我的jquery调用是否正确?鉴于我有一个空的$ POST数组
  • 如何使用jquery的参数填充$ HTTP_RAW_POST_DATA?

2 个答案:

答案 0 :(得分:2)

数据在发送之前会转换为查询字符串。通过将processData设置为false,可以避免此处理。

示例:

将xml文档作为数据发送到服务器。通过将processData选项设置为false,可以防止将数据自动转换为字符串。

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

答案 1 :(得分:1)

您是否尝试更改内容类型?也许将它设置为空字符串(正如您所说的旧调用没有提供内容类型)?

我有一个类似的问题,服务器期望原始帖子数据是JSON。将内容类型更改为'application / json'后,它工作正常。