2014-12-01 166 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