Safari浏览器截断POST参数

8

我的代码在Safari 6.1.2上的Mac OS Lion操作系统以外的浏览器上完全正常。

以下是我使用的ajax post -

$.ajax({
     type: 'POST',
     dataType: 'text/html',
     url:"/MyProxy.php",
     data:{"server":"mydomain.com", "user":"vijay", "passd":"highly@secret"},
     error: function(data) {
         console.log(data);
         alert("Failure - "+data);
         return;
     },
     success: function(data) {
         console.log("Success - "+data);
         parseInformation(data);
     }
 });

为了调试目的,我在我的PHP服务器代码中添加了日志记录。

header('cache-control: no-cache');

function getRealPOST() {
    $pairs = explode("&", file_get_contents("php://input"));
    $vars = array();
    foreach ($pairs as $pair) {
        $nv = explode("=", $pair);
        $name = urldecode($nv[0]);
        $value = urldecode($nv[1]);
        $vars[$name] = $value;
    }                   
    return $vars;
} 

echo "-------";         
var_dump($_POST);           
echo "-------";             

print_r(getRealPOST()); 

在Safari上,控制台日志显示的内容类似于-
-------array(2) {
  ["userName"]=>
  string(5) "vijay"
  ["passwd"]=>
  string(4) "hig"
}
-------Array
(
    [

serverAdd] => mydomain.com
    [userName] => vijay
    [passwd] => hig
)

有没有猜测为什么只有Safari表现出这种行为,即使在iPad / iPhone和其他使用Safari作为浏览器的操作系统中,我也遇到了这个截断问题。我还阅读过一篇帖子,人们在这些情况下也面临着类似的问题,但是,在那些情况下,他们的请求非常大,而我的请求则非常小。

需要帮助吗?


你能提供带有POST参数的PHP代码结果吗?你找到解决方案了吗?或者问题出在哪里?先谢谢了! - jeerbl
很遗憾,我没有找到解决方案。PHP代码如上所述,仅具有最小的功能。 - VijayKumar
这些是您在测试此功能时使用的确切值,还是仅作为示例。也就是说,正确的值是否可能包含密码中导致截断的特殊字符。 - JohanSellberg
1
尝试将键的名称从“server”更改为其他名称,例如“my_domain”。 - Kup
尝试在创建JSON对象时删除不必要的引号:data:{server:“mydomain.com”,user:“vijay”,passd:“highly@secret”}还尝试将dataType更改为“html”。 - Rafał Mnich
感谢 @RafałMnich 的帮助,但是我现在已经关闭了那个工作,所以我暂时无法验证这个问题。 - VijayKumar
1个回答

2
我测试了你的代码,发现请求中的dataType: 'text/html'参数有问题。通常情况下不需要指定它,jQuery足够智能地理解接收到的格式。
无论如何删除dataType参数后,我都得到了期望的输出: this is the screenshot of Safari console 我还建议您使用像Charles这样的代理工具https://www.charlesproxy.com查看PHP脚本获取的真实输出,以便确定您是在JavaScript端还是服务器端出现了问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接