使用JS substr()的AJAX成功函数在WP 4.1和4.0中失败

时间:2015-01-06 作者:user48973

多年来,我在我的插件中设置了php ajax调用和响应,如下所示,并根据需要设置了js错误检测条件,如。。。

if( "<e>" == msg.substr(0, 3) ) { do_something(); }
然而,自WP 4.1起,substr不再对响应字符串起作用,尽管split起作用。为什么?我认为两者之间唯一的主要区别在于jquery/ui,但我认为这不会影响ajax响应?

MY_AJAX.PHP

<?php
    die("<e>Foo");
?>

My.js

function test_msg(){
    $.post("my_ajax.php", "foo", function(msg) {
        console.log(msg.substr(0, 3)); //LOGS empty string (twice)
        console.log(msg.split(">")[1]); //LOGS "Foo"
        if( "<e>" == msg.substr(0, 3) ){console.log("Error");} //fails
    });
}

1 个回复
SO网友:user48973

不管好坏这似乎是PHP中的一个错误配置。新开发服务器(WAMP)上的INI,在从wp4更新时导致未知的代码损坏。0到4.1,因此PHP正在注入不需要的空白,例如“\\r\\n\\r\\n…”在我的AJAX响应中(比如缺少一个结束php?>标记或其他什么?)

运行时ob_clean() 在返回AJAX响应之前,问题消失了,并且。。。当只有项目的DEV副本显示不需要的行为时,我将活动站点(wp4.1)复制到重新配置的DEV服务器上的镜像安装中,并按照预期执行所有功能。

尽管如此,我在未来的WP项目中使用自定义AJAX端点的做法现在已被正式否决;-)

结束

相关推荐

在我的插件中直接使用$_POST而不是使用admin-ajax.php从AJAX接收数据安全吗?

当我们想从中发布数据时frontend 对于WORDPRESS,每个人都说我必须使用admin-ajax.php.但是我可以添加查询变量,并使用全局变量在插件文件中接收发布的数据,然后我可以用它做任何事情通过这种方式,一切都变得简单了,但在插件文件中接收和存储发布的数据是否安全?以及为什么所有人都在使用admin-ajax.php 在他们的项目中?