CodeIgniter で動作するシナリオは次のとおりです: (質問の形式が適切でない場合は申し訳ありません。これが私の最初の投稿です。)
- 送信する大きなフォームがあり、検証後、ajaxで送信できます。
- 私のコントローラーでは、ユーザーがログインしている場合にビューでユーザー名を渡し、フォームの非表示の入力フィールドに配置します。ユーザーがログインしていない場合、結果は
<input type="hidden" id="loggedin" name="username" value="" />
3.私のjavascriptでは、フォームが有効かどうか、ユーザー名が!==""であるかどうかを確認し、 ajax でフォームを投稿しています。それ以外の場合は、ログインページでダイアログをポップしています。ユーザーがログインしている場合、フォームの送信は正常に機能しています。
問題は、ユーザーがログインダイアログにログインした後にフォームを投稿する方法がわからないことです。
ここにコードがあります:
$('#MyForm').submit(function(event){
event.preventDefault();
var username=document.getElementById('loggedin').value;
if($('#MyForm').valid() && username!=="" ){
var serializeddata=$("#MyForm").serialize();
$.ajax({
type: "POST",
url: "formsubmition", // The urls are in CI format
contentType: "application/x-www-form-urlencoded;charset=UTF-8",
data: serializeddata,
dataType: "html",
success: function(data) {
$('#message_ajax_anaz').html(data);
}
})
}else if($('#MyForm').valid() && username==""){
$("#loginpop").load("login").dialog();
}
});
ログインページの ajax コード:
$('#login').submit(function(event){
event.preventDefault();
var dataser=$('#login').serialize();
$.ajax({
type: "POST",
url: "login",
contentType: "application/x-www-form-urlencoded;charset=UTF-8",
data: dataser,
dataType: "html",
success: function(data) {
$('#message_ajax').html(data);
}
})
上記はダイアログで正常に機能しており、正常にログインできます。
$('#MyForm').submit(関数に戻るには、フォームに再度入力する必要はありません。
より多くの人に役立つことを願って、方法を見つけました。
submit 関数の外側でダイアログを初期化しました:
$("#loginpop").load("login").dialog({
autoOpen:false
})
次に、elseステートメントを変更しました:
else if($('#MyForm').valid() && username==""){
$("#loginpop").dialog('open');
そして、私のログインajax成功関数に追加しました:
$("#loggedin").val(data); // Changed the value of the hidden input with the username value on the fly. data contains the username
$('#MyForm').submit();
$('#loginpop').dialog('close');
これですべてが機能し、ログイン後にフォームが送信されます:)