You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过AJAX向PHP脚本发送包含(&)的JSON数据?

解决AJAX传递含特殊字符的JSON字符串到PHP的问题

看起来你遇到的问题是传递包含特殊字符(比如&)的JSON字符串时,PHP无法正确接收完整的data参数,对吧?这是因为手动拼接POST参数的方式导致了参数解析错误,咱们一步步来解决:

问题根源

你在JS里手动拼接了data字符串:

data: 'name=john&data=' + myData,

这里的&在JS字符串里实际会被解析成&,而myData里的test & test最终会变成test & test,拼接后整个请求参数会变成:

name=john&data=[{"label":"test & test"}]

HTTP请求里&是参数分隔符,服务器会把& test后面的部分当成新的参数,导致$_POST['data']只拿到[{"label":"test ,剩下的内容被截断成了无效参数。

解决方案:让jQuery自动处理参数编码

不要手动拼接字符串,改用对象形式传递data,jQuery会自动帮你处理所有特殊字符的URL编码,避免参数被截断:

修改后的JS代码

$(document).on('click', '#my-button', function(){
    var myData = '[{"label":"test & test"}]';
    $.ajax({
        url: 'demo.php', // 注意你写的demp.php大概率是笔误,记得改成实际文件名
        type: 'post',
        data: {
            name: 'john',
            data: myData
        },
        dataType: 'json',
        success: function(json) {
            console.log('请求成功');
        },
        error: function(xhr, ajaxOptions, thrownError) {
            console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
        }
    });
});

对应的PHP代码(无需修改,直接用var_dump($_POST))

这时候PHP的$_POST['data']会拿到完整的JSON字符串,var_dump输出应该是:

array(2) {
  ["name"]=>
  string(4) "john"
  ["data"]=>
  string(27) "[{"label":"test & test"}]"
}

进阶方案:直接传递JSON格式的请求体

如果你想把myData作为真正的JSON数据传递(而不是字符串),可以设置contentType为application/json,然后发送JSON字符串,这时候PHP需要从php://input读取请求体:

修改后的JS代码

$(document).on('click', '#my-button', function(){
    // 直接用JS对象再转成JSON,比手动写字符串更规范
    var myData = [{label: "test & test"}];
    $.ajax({
        url: 'demo.php',
        type: 'post',
        data: JSON.stringify({
            name: 'john',
            data: myData
        }),
        contentType: 'application/json', // 关键:告诉服务器这是JSON数据
        dataType: 'json',
        success: function(json) {
            console.log('请求成功');
        },
        error: function(xhr, ajaxOptions, thrownError) {
            console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
        }
    });
});

对应的PHP代码

// 读取JSON请求体并解析
$jsonData = file_get_contents('php://input');
$postData = json_decode($jsonData, true);
var_dump($postData);

这时候输出会是解析后的数组:

array(2) {
  ["name"]=>
  string(4) "john"
  ["data"]=>
  array(1) {
    [0]=>
    array(1) {
      ["label"]=>
      string(9) "test & test"
    }
  }
}

内容的提问来源于stack exchange,提问作者user9139889

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:15:44