2016-05-04 5 views
0

AJAXとJavaScriptを初めて使いましたが、Ajaxを使ってHTMLタグを基にした値をPythonハンドラに送信することに取り組みました。以下はこのsiteからシミュレートされた私のコードです。私が抱えている問題は、ボックスが「チェックされている」と「チェックされていない」を比較することです。入力タグに「チェックされていません」と表示されたら、値はどのように渡されますか?ユーザーがクリックしたものがAJAXを介してPython Handlerに渡されることを確認したいので、私は接続を取得していません。チェックボックス付きAJAX

send_data = function(status) { 
 

 
     $.ajax({ 
 
     url: "/subscription", 
 
      dataType: "json", 
 
      data: {'status' : status}, 
 
      type: "POST", 
 
      cache: false 
 

 
    }).done(function(data, status, xml) { 
 

 
     var obj = jQuery.parseJSON(data); 
 
     alert(obj.success); 
 

 
     }).fail(function(jqXHR, textStatus, errorThrown) { 
 

 

 
     }).always(function() { 
 

 

 
     }); 
 

 
} 
 

 

 
$(document).ready(function() { 
 

 
    $("#subscription").submit(function() { 
 

 
     var cb = $("input#switch-1"); 
 

 
     if (cb.is("checked")) { 
 
      send_data(cb.val()); 
 
     } else { 
 
      send_data(cb.val()); 
 
     } 
 
     return false; 
 
    }); 
 

 
});
<form id="subscription" action=""> 
 
    <label class="mdl-switch mdl-js-switch mdl-js-ripple-effect" for="switch-1"> 
 
    <input type="checkbox" id="switch-1" name="status" class="mdl-switch__input" id="status" unchecked /> 
 
    <span class="mdl-switch__label">USEREMAIL Subscribed</span> 
 
<input type="submit" value="Submit" /> 
 

 
</form>

+0

この入力にはすでにIDがあるので、 'id =" status "' 'name =" status "'にする必要があります。 –

答えて

0

まず、正しい選択は:checkedあります。
∨チェックされている場合にのみ、send_data()関数にチェックボックスの値を渡す必要があります。そうでなければ、条件は無関係です。チェックされた入力とチェックされていない入力に対して同じことをしています。

だから、あなたのコードは次のようなものでなければなりません:

if (cb.is(":checked")) { 
    send_data(cb.val()); 
} else { 
    send_data(null); 
} 

しかし、あなたが必要とするすべてのサーバーにフォームの値を渡している場合は、手動でチェックボックスを処理する必要はありません、あなただけのこの操作を行うことができます

checboxがチェックされていない場合、その値はサーバに送信されません(デフォルトのブラウザ動作)。したがって、バックエンドスクリプトのstatusフィールドの有無をチェックするだけで済みます。

+0

こんにちはAlexey、フィードバックありがとうございます。あなたのコードを追加しようとしましたが、 "405 Method Not Allowed"があります。私はまずそれが私のpythonハンドラの問題だと思ったが、javascriptの何かが今私は信じている。他のコードを使ってハンドラを使ってテストすることができましたが、ステータス値が渡されません。私が迷っているものはわからない:-) – user2690151

+0

私のハンドラが添付されていますが、ステータスの受け渡しに問題があります。クラスサブスクリプション(webapp2.RequestHandler): def post(self): subscription_status = self.request.get( 'status') user_name = (%s !, user_name) logging.info( 'ステータスは%s!'、subscription_status) – user2690151

+0

これは私が言うことができます:1)投稿データをサーバーに送信する方法だけを変更した場合、405エラーが発生することはありません。 2)私がコメントで指摘したように、あなたの入力は「名前」属性を持たないので、値はサーバーに送られません。おそらく、あなたのコードが機能していないのかもしれません。 –

0

あなたの現在のコードは次のように低減することができ、あなたは

$("#subscription").submit(function() { 
    var cb = $("input#switch-1"); 
    send_data(cb.val()); //your current code can be reduced like this 
    return false; 
}); 

...あなたが同じことを送信している両方のケースでは、無駄に検証を行っていますが渡されるかを確認したい場合は、単に

+0

これは多くの意味があります。ありがとうございました!申し訳ありません、ここ101で。あなたのコードを追加しましたが、渡された実際の値は表示されません。私はコンソールを有効にしました。チェックされていないものとチェックされていないものが合格しなかった理由は何ですか?http://postimg.org/image/tdhm5k34x/ – user2690151

+0

@ user2690151、コンソールのエラーはわかりやすいです。このコードは、適切なWebサーバー上でhttpプロトコル経由で実行してください。_file:// _ –

+0

ではなく、完全にありがとうございます.-) – user2690151

関連する問題