如何通过jQuery POST请求发送原始字符串?

时间:2012-02-05 07:13:12

标签: javascript jquery rest post

我试图通过jQuery.ajax()

发布一个原始字符串

如,

contact_list=352345

我有

$.ajax({
        beforeSend: function(xhr){
            xhr.setRequestHeader('Content-Type', header);
        }
        },
        url: link,
        type: type,
        processData:false,
        data: data,
        success: function(data){
            console.log(data);
        }
     });
我发送JSON数据时

大多数,所以header='application/json'

在服务器端,我回显$HTTP_RAW_POST_DATA并看到我的JSON字符串就好了。

但是,我有时也希望发送普通表单数据。但是当我设置header='application/x-www-form-urlencoded' $HTTP_RAW_POST_DATA为空时。

ProcessData是假的,所以它不应该只是通过我的字符串吗?

作为临时解决方法,我只是将标题保留为application/json并忽略服务器上此特定端点的Content-Type

3 个答案:

答案 0 :(得分:1)

无需额外工作。试试这个:

$.ajax({
    url: link,
    data: data,
    success: function(data){
        console.log(data);
    }
 });

docs

  

processDataBoolean:

     

默认值:true默认情况下,数据作为传入数据选项   对象(技术上,除了字符串之外的任何东西)将被处理   并转换为查询字符串,适合默认值   content-type“application / x-www-form-urlencoded”。如果你想发送   DOMDocument或其他未处理的数据将此选项设置为false。

答案 1 :(得分:1)

我宁愿向我的javascript函数发送一个标志来查看哪种输入

所以你的功能看起来像这样

function processIt(request_type,link,type,data) {
if(request_type == 'json')
$.ajax({
    beforeSend: function(xhr){
        xhr.setRequestHeader('Content-Type', header);
    }
    },
    url: link,
    type: type,
    processData:false,
    data: data,
    success: function(data){
        console.log(data);
    }
 });
else 
 $.ajax({
url: link,
data: data,
success: function(data){
    //do something
}
 });
}

但是,如果您想要按原样使用您的功能,那就是。

答案 2 :(得分:0)

PHP $HTTP_RAW_POST_DATA不适用于enctype =“multipart / form-data”。 http://www.php.net/manual/en/ini.core.php#ini.always-populate-raw-post-data

所以,现在在服务器上我执行以下操作:

if (count($_POST == 0){
    $raw = file_get_contents('php://input');    
}else{
    $raw = '';
    foreach($_POST as $key => $value) {
        $raw = $raw.$key.'='.$value.'&';
    }
}

似乎正在发挥作用。

相关问题