EC-CUBE3.0.15
作成中のプラグインで、ajaxでエラーになってしまいます。
注文履歴詳細ページにおいて、プルダウンで選択した後に保存ボタンを押すとajaxから保存処理を呼ばれるような実装をしています。
保存処理には成功しており、ログにも「注文履歴保存完了」が出力されているのですが、保存処理後に「更新に失敗しました。入力内容を確認してください。」のアラートが表示されてしまいます。
ajaxでエラーになる原因、または原因を探る方法がわかりますでしょうか?
history_test.twig
<script>
$(document).ready(function() {
$('#save').click(function() {
var postData = {};
$("#test_form").find("select").each(function() {
postData[$(this).attr("id")] = $(this).val();
});
$.ajax({
type: "POST",
url: "{{ url('mypage_history_test') }}",
data: postData,
dataType : "json",
}).done(function(data){
return true;
}).fail(function(data){
alert('更新に失敗しました。入力内容を確認してください。'); // ★ このアラートが表示されてしまう
return false;
}).always(function(data) {
});
});
});
</script>
TestController.php
class HistoryController extends AbstractController
{
public function save(Application $app, Request $request)
{
if (!$request->isXmlHttpRequest()) {
log_warning('不正アクセス');
throw new BadRequestHttpException();
}
try {
log_info('注文履歴保存開始');
$plgOrderDetailChoiceIds = $request->request->all();
foreach ($plgOrderDetailChoiceIds as $formId => $val) {
$ItemChoice = $app['eccube.plugin.test.repository.test']->find($val);
if (!$ItemChoice) {
log_info('存在しません。');
return $app->json(array(), 500);
}
$id = substr($formId, strlen('plg_test_order_detail_'));
$OrderDetailTest = $app['eccube.plugin.test.repository.order_detail_test']->find($id);
if ($val != $OrderDetailTest->getItemChoiceId()) {
$OrderDetailTest->setItemChoiceId($val);
$OrderDetailTest->setItemChoiceName($ItemChoice->getName());
$OrderDetailTest->setPrice($ItemChoice->getPrice());
$app['orm.em']->persist($OrderDetailTest);
}
}
$app['orm.em']->flush(); // ★ 保存処理は実行されている
log_info('注文履歴保存完了'); // ★ このログも出力されている
return $app->json(array());
} catch (\Exception $e) {
log_error('予期しないエラー', array($e->getMessage()));
$app['monolog']->error($e);
return $app->json(array(), 500);
}
}
}
TestServiceProvider.php
$app->match('/mypage/history/test',
'\Plugin\Test\Controller\HistoryController::save'
)
->bind('mypage_history_test');
----------------
EC-CUBE 《プラチナ》ランクパートナー
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。