Index: branches/version-2_11-dev/data/class/pages/shopping/LC_Page_Shopping.php
===================================================================
--- branches/version-2_11-dev/data/class/pages/shopping/LC_Page_Shopping.php	(revision 20970)
+++ branches/version-2_11-dev/data/class/pages/shopping/LC_Page_Shopping.php	(revision 21138)
@@ -132,9 +132,17 @@
                     }
                 }
-
-                SC_Response_Ex::sendRedirect(
-                        $this->getNextLocation($this->cartKey, $this->tpl_uniqid,
-                                               $objCustomer, $objPurchase,
-                                               $objSiteSess));
+                // スマートフォンの場合はログイン成功を返す
+                elseif (SC_Display_Ex::detectDevice() === DEVICE_TYPE_SMARTPHONE) {
+                    echo SC_Utils_Ex::jsonEncode(array('success' => 
+                                                $this->getNextLocation($this->cartKey, $this->tpl_uniqid,
+                                                                       $objCustomer, $objPurchase,
+                                                                       $objSiteSess)));
+                    exit;
+                } else {
+                    SC_Response_Ex::sendRedirect(
+                            $this->getNextLocation($this->cartKey, $this->tpl_uniqid,
+                                                   $objCustomer, $objPurchase,
+                                                   $objSiteSess));
+                }
                 exit;
             }
@@ -143,9 +151,19 @@
                 // 仮登録の場合
                 if($this->checkTempCustomer($objFormParam->getValue('login_email'))) {
-                    SC_Utils_Ex::sfDispSiteError(TEMP_LOGIN_ERROR);
-                    exit;
+                    if (SC_Display_Ex::detectDevice() === DEVICE_TYPE_SMARTPHONE) {
+                        echo $this->lfGetErrorMessage(TEMP_LOGIN_ERROR);
+                        exit;
+                    } else {
+                        SC_Utils_Ex::sfDispSiteError(TEMP_LOGIN_ERROR);
+                        exit;
+                    }
                 } else {
-                    SC_Utils_Ex::sfDispSiteError(SITE_LOGIN_ERROR);
-                    exit;
+                    if (SC_Display_Ex::detectDevice() === DEVICE_TYPE_SMARTPHONE) {
+                        echo $this->lfGetErrorMessage(SITE_LOGIN_ERROR);
+                        exit;
+                    } else {
+                        SC_Utils_Ex::sfDispSiteError(SITE_LOGIN_ERROR);
+                        exit;
+                    }
                 }
             }
@@ -522,4 +540,26 @@
         return $count > 0;
     }
+
+    /**
+     * エラーメッセージを JSON 形式で返す.
+     *
+     * TODO リファクタリング
+     * この関数は主にスマートフォンで使用します.
+     *
+     * @param integer エラーコード
+     * @return string JSON 形式のエラーメッセージ
+     * @see LC_PageError
+     */
+    function lfGetErrorMessage($error) {
+        switch ($error) {
+            case TEMP_LOGIN_ERROR:
+                $msg = "メールアドレスもしくはパスワードが正しくありません。\n本登録がお済みでない場合は、仮登録メールに記載されているURLより本登録を行ってください。";
+                break;
+            case SITE_LOGIN_ERROR:
+            default:
+                $msg = "メールアドレスもしくはパスワードが正しくありません。";
+        }
+        return SC_Utils_Ex::jsonEncode(array('login_error' => $msg));
+    }
 }
 ?>
Index: branches/version-2_11-dev/data/Smarty/templates/sphone/shopping/index.tpl
===================================================================
--- branches/version-2_11-dev/data/Smarty/templates/sphone/shopping/index.tpl	(revision 21132)
+++ branches/version-2_11-dev/data/Smarty/templates/sphone/shopping/index.tpl	(revision 21138)
@@ -21,4 +21,38 @@
  *}-->
 <!--▼CONTENTS-->
+<script>
+  function ajaxLogin() {
+      var checkLogin = fnCheckLogin('member_form');
+
+      if (checkLogin == false) {
+          return false;
+      } else {
+
+          var postData = new Object;
+          postData['<!--{$smarty.const.TRANSACTION_ID_NAME}-->'] = "<!--{$transactionid}-->";
+          postData['mode'] = 'login';
+          postData['login_email'] = $('input[type=email]').val();
+          postData['login_pass'] = $('input[type=password]').val();
+
+          $.ajax({
+              type: "POST",
+              url: "<!--{$smarty.const.ROOT_URLPATH}-->shopping/index.php",
+              data: postData,
+              cache: false,
+              dataType: "json",
+              error: function(XMLHttpRequest, textStatus, errorThrown){
+                  alert(textStatus);
+              },
+              success: function(result){
+                  if (result.success) {
+                      location.href = '<!--{$smarty.const.ROOT_URLPATH}-->shopping/' + result.success;
+                  } else {
+                      alert(result.login_error);
+                  }
+              }
+          });
+      }
+  }
+</script>
 <section id="slidewindow">
 <div data-role="header">
@@ -27,5 +61,6 @@
 </div>
 </div>
-<form name="member_form" id="member_form" method="post" action="<!--{$smarty.const.HTTP_URL}-->shopping/index.php" onSubmit="return fnCheckLogin('member_form')">
+<!--<!--{$smarty.const.HTTP_URL}-->shopping/index.php-->
+<form name="member_form" id="member_form" method="post" action="javascript:;" onSubmit="return ajaxLogin()">
     <input type="hidden" name="<!--{$smarty.const.TRANSACTION_ID_NAME}-->" value="<!--{$transactionid}-->" />
     <input type="hidden" name="mode" value="login" />
