【问题标题】:How do you send a raw strings through a jQuery POST request?如何通过 jQuery POST 请求发送原始字符串?
【发布时间】:2012-02-05 07:13:12
【问题描述】:

我正在尝试通过 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

【问题讨论】:

  • 真正令我难以置信的是,在网络检查器中,请求有效负载似乎正确通过。例如,contact_list=352345 是否存在......也许这是 PHP 的事情,表单数据没有显示在 $HTTP_RAW_POST_DATA 中?

标签: javascript jquery rest post


【解决方案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
}
 });
}

但前提是你想按原样使用你的函数。

【讨论】:

  • 我最终做到了这一点,但我仍然无法将标题设置为“application/x-www-form-urlencoded”。如果我这样做,它不会通过我的字符串。理想情况下,我希望能够将其设置为用于服务器端目的......
【解决方案2】:

不需要额外的工作。试试这个:

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

docs:

processDataBoolean:

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

【讨论】:

  • 嗯,我想我很好奇为什么它没有为这个头类型发送我的字符串,但它是为 application/json 发送的。
  • @speg。那不是解决了问题吗?我没看懂你写的内容。
  • 不确定,我现在在床上 :)。早上会试试。我的意思是,为什么当标头类型是 application/json 而不是 application/x-www-form-urlencoded 时我能够看到 HTTP_RAW_POST_DATA。就好像 jquery 正在为后一种情况改变它,即使 processData 仍然是错误的。
  • 我已经看到了,并将其解释为“如果您将其设置为 false,jQuery 将不会触及您的数据”。这就是我所做的。但是,无论哪种情况,我都只是传递一个字符串。只有当我将标题设置为“application/x-www-form-urlencoded”时,jQuery 才会删除我的数据。
  • @speg。你确定它被删除了?你看不到那个带有萤火虫的字符串吗?
【解决方案3】:

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.'&';
    }
}

似乎工作正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-30
    • 2017-10-09
    • 2012-03-25
    • 1970-01-01
    • 2019-10-08
    相关资源
    最近更新 更多