Javascript 如何将变量从服务器端返回到客户端脚本?

Javascript 如何将变量从服务器端返回到客户端脚本?,javascript,php,wordpress,contact-form-7,Javascript,Php,Wordpress,Contact Form 7,我在插件作者那里找到了这篇文章:但问题是它重定向到了一个事先已知的URL。我需要知道URL作为服务器的响应,因为重定向URL将取决于提交的值 我可以记录事件: document.addEventListener('wpcf7mailsent', function(event) { console.log(event); }, false); 但我根本不确定服务器提供了多少数据,客户端脚本提供了多少数据。我试着像这样修改提交: add_action('wpcf7_posted_data'

我在插件作者那里找到了这篇文章:但问题是它重定向到了一个事先已知的URL。我需要知道URL作为服务器的响应,因为重定向URL将取决于提交的值

我可以记录事件:

document.addEventListener('wpcf7mailsent', function(event) {
    console.log(event);
}, false);
但我根本不确定服务器提供了多少数据,客户端脚本提供了多少数据。我试着像这样修改提交:

add_action('wpcf7_posted_data', 'alter_input');

function alter_input($data) {
    $data['your-message'] = 'Something totally different here.';
}
但我的更改似乎对事件对象包含的数据没有影响。我很难找到响应(如果有的话)的确切位置以及应用的过滤器或操作

编辑:我改写了问题;太多的答案和评论被困在“为什么”中,这是不相关的,或者尝试提出“其他方法”,这不是我所问的,而不仅仅是如何解决的问题。

您可以尝试以下方法:

document.addEventListener( 'wpcf7submit', function( event ) {
    var inputs = event.detail.inputs;

    for ( var i = 0; i < inputs.length; i++ ) {
        if ( 'name-of-the-field' == inputs[i].name ) {
            //make your test on inputs[i].value and rediret
        }
    }
}, false );
document.addEventListener('wpcf7submit',函数(事件){
var输入=event.detail.inputs;
对于(变量i=0;i
最简单的方法是利用Contact Form 7的自定义DOM事件来运行
JavaScript。下面是一个将您重定向到另一个脚本的示例
wpcf7mailsent事件发生时的URL:

因此,在restapi.php中,而不是:

if ( ! empty( $result['scripts_on_sent_ok'] ) ) {
    $response['onSentOk'] = $result['scripts_on_sent_ok'];
}
您必须添加url逻辑,例如:

$response['onSentOk'] = array('top.location.href="' . $cutomUrl .'";');
但是,这个插件的设计也不是为了处理服务器响应;)

更新

另一种解决方案是,由于您可能无法访问插件文件,因此需要发出第二个ajax请求,这一次是针对您的一个脚本:

 document.addEventListener('wpcf7mailsent', function(event) {
      $.ajax({
         url: 'your_scrit.php',
         data: sameData,
         success: function(response){
            // do your redirect
         }
      });
 }, false);

我找到了我要找的东西。对服务器的AJAX请求实际上只返回三个变量,例如:

{
    into:"#wpcf7-f19-p59-o1",
    message:"An error occurred. Please try again later.",
    status:"mail_failed"
}
所以那里没有运气。没有钩子或过滤器来修改响应服务器端,添加更多变量。即使有一种方法,客户端javascript的编码方式也不是很容易覆盖单一方法来实现我想要的功能。它需要一个数百行的丑陋副本来改变一些小事情


因此,我的结论是,这是不可行的,至少目前是不可行的,除非插件作者决定做出一些改变,以适应这种功能,wink-wink。我将自己实现一个表单处理操作。这将减少工作量。

我也有同样的问题,上面的答案都没有帮助。实际上这是可行的,您可以按照下面的代码(将其添加到functions.php):

然后,您将能够使用以下javascript代码访问新元素:

document.addEventListener( 'wpcf7mailsent', function( event ) {

    console.log( event.detail.apiResponse.foo );

}, false );

顺便说一句,您可能希望在
wpcf7mailssent
上使用事件
wpcf7submit
,正如一些答案中所建议的那样,因为
wpcf7mailssent
只有在表单成功提交时才会触发(例如,所有必填字段都正确填写)与
wpcf7submit

不同的是,它将取决于提交的值,所以为什么需要服务器响应?AJAX提交?只需在响应后使用
location='someURL.php'
。@PHPglue它是一个插件,所以我们不能完全控制JScode@TemaniAfif重定向url包含服务器需要计算的参数。提交的值是计算的基础。您可以在列表器的JS中进行此计算,不是吗?我知道这可能是不安全的,但ot将取决于治疗的种类,如果治疗是的话,那正是问题所在。没有必要的数据可用,也没有办法使其可用。@SimonJosefKok刚刚向您演示了如何使其可用:)是吗?你刚才不是说:“但是他们不提供任何访问服务器响应的权限吗?”?也许我现在太累了:问题不是缺少对插件文件的访问,而是修改第三方插件文件是一种不好的做法。我不会这么做的。发送第二个请求有点违背了使用插件的初衷,因为它需要自己的服务器端验证机制和整个过程。不过,我还是很感激你的帮助如果您操作支付并使用类似的插件,您已经遇到了比修改第三方文件更大的问题:))然而,我的第二个ajax更新调用应该可以解决您的问题,而无需更改任何第三方文件。
{
    into:"#wpcf7-f19-p59-o1",
    message:"An error occurred. Please try again later.",
    status:"mail_failed"
}
add_filter( 'wpcf7_ajax_json_echo', 'filter_wpcf7_ajax_json_echo', 10, 2 );
    
function filter_wpcf7_ajax_json_echo( $items, $result ) { 
    
    $items['foo'] = 'bar';
        
    return $items;
        
};
document.addEventListener( 'wpcf7mailsent', function( event ) {

    console.log( event.detail.apiResponse.foo );

}, false );