Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让Jquery发送POST数据以在PHP中填充$HTTP_RAW_POST_data变量?_Php_Jquery_Ajax - Fatal编程技术网

如何让Jquery发送POST数据以在PHP中填充$HTTP_RAW_POST_data变量?

如何让Jquery发送POST数据以在PHP中填充$HTTP_RAW_POST_data变量?,php,jquery,ajax,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

我正试图整理一些遗留代码

以下是执行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_数据变量

使用jquery调用时,$HTTP\u RAW\u POST\u数据似乎没有填充,奇怪的是,$\u POST[]似乎也是空的

我注意到,在比较两个ajax调用时,firebug的POST选项卡中的区别在于jquery版本具有“application/x-www-form-urlencoded”作为进一步的信息,而传统调用没有

我相信问题在于jqueryajax请求发送的头的类型,但我不确定如何进一步使用jquery操作这些头

我的问题是:

  • 我的jquery调用正确吗?假设我有一个空的$POST数组
  • 如何使用jquery的参数填充$HTTP\u RAW\u POST\u数据

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

例如:

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

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

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

例如:

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

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

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


我遇到了一个类似的问题,服务器希望原始post数据是JSON。将内容类型更改为“application/json”后,效果良好。

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


我遇到了一个类似的问题,服务器希望原始post数据是JSON。将内容类型更改为“application/json”后,效果很好。

我已经将“processData:false”设置为上面的示例。还有什么想法吗?我在ajax请求中还有两个键:contentType:'text/xml',type:'POST',有了这些,我可以使用if('POST'=$httpMethod){/$body=file\u get\u contents('php://input“”;$body=$HTTP_RAW_POST_DATA;}要使HTTP_RAW_POST_数据工作,我启用了php.ini设置always\u populate\u raw\u post\u data=OnI,正如我上面的示例所示,我已经设置了“processData:false”。还有什么想法吗?我在ajax请求中还有两个键:contentType:'text/xml',type:'POST',有了这些,我可以使用if('POST'=$httpMethod){/$body=file\u get\u contents('php://input“”;$body=$HTTP_RAW_POST_DATA;}要使HTTP_RAW_POST_数据工作,我启用了php.ini设置始终\u populate\u raw\u post\u data=On