2014-12-01 169 views
0

我正在制作访客可以订阅邮件列表的表单。使用ajax处理表单

的代码是:

function subscribe_form() { 
     global $my_subme; 

     $form = ''; 
     $msg = ''; 

     if (isset($_GET['status'])) { 
      if ('subscribed' === $_GET['status']) { 
       $msg = __('Thank you for confirming your subscription', 'subme'); 
      } else if ('unsubscribed' === $_GET['status']) { 
       $msg = __('You have successfully unsubscribed.', 'subme'); 
      } else { 
       $msg = __('Sorry, but something went wrong.', 'subme'); 
      } 

      $form .= '<p>'; 
      $form .= esc_html($msg); 
      $form .= '</p>'; 
     } else { 
      /* Process the form when submitted */ 
      if ((isset($_POST['subscribe']) || isset($_POST['unsubscribe'])) && isset($_POST['source']) && 'widget' === $_POST['source']) { 
       /* Check nonce */ 
       if (! isset($_POST['subme_widget_nonce']) || ! wp_verify_nonce($_POST['subme_widget_nonce'], 'subme_widget')) { 
        return; 
       } 

       if (! isset($_POST['email'])) { 
        return; 
       } 

       if (! $my_subme->is_valid_email(strtolower($_POST['email']))) { 
        $msg = __('Sorry, but this does not seem like a valid email address.', 'subme'); 

       } else { 
        if (isset($_POST['subscribe'])) { 
         $msg = $my_subme->subscribe($_POST['email']); 
        } else { 
         $msg = $my_subme->unsubscribe($_POST['email']); 
        } 
       } 
      } 

      $form .= '<form method="post">'; 
      $form .= wp_nonce_field('subme_widget', 'subme_widget_nonce', true, false); 
      $form .= '<input type="hidden" name="source" value="widget" />'; 
      $form .= '<p>'; 
      $form .= __('Your email address:', 'subme') . '<br />'; 
      $form .= '<input type="text" name="email" /><br /><br />'; 
      $form .= '<input type="submit" name="subscribe" value="' . __('Subscribe', 'subme') . '" />'; 
      $form .= ' '; 
      $form .= '<input type="submit" name="unsubscribe" value="' . __('Unsubscribe', 'subme') . '" />'; 
      $form .= '</p>'; 
      $form .= '</form>'; 

      if (strlen($msg) > 0) { 
       $form .= '<p>'; 
       $form .= esc_html($msg); 
       $form .= '</p>'; 
      } 
     } 

     echo $form; 
     echo '</div>'; 

    } 


subscribe_form(); 

如何改变这种代码,以便它使用AJAX处理?正如你所看到的,当前用户提交表单时,它只是简单的页面刷新。

+0

为什么这是一个函数? – 2014-12-01 17:16:12

+0

我将表单添加到插件中(这与我的问题无关):) – 2014-12-01 17:16:56

回答

0

如果你有两个提交,只有第二个将被发送到表单...你需要做一些类似于2的表单,或添加一个onclick事件来更改名称或类型或隐藏值...类似于:

<input type="submit" onclick="document.getElementById('action').value='subscribe'" value="Subscribe" /> 
<input type="submit" onclick="document.getElementById('action').value='unsubscribe'" value="Unsubscribe" /> 
<input type="hidden" name="action" id="action" /> 
0

1.-您的代码显示的是php,好的。这是服务器端。

2.-从客户端。你应该有代码的JavaScript发送到服务器,数据说这个客户端要订阅。

+0

当考虑我的代码时,javascript代码将如何显示?你能提供代码示例吗? – 2014-12-01 18:43:35