我试图通过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
。
答案 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.'&';
}
}
似乎正在发挥作用。