2017-08-09 17 views
0

奇妙な質問文句は残念です。すべての正直なところで、私はここの深いところにいます。一度に大量のことを学ばなくてはなりません。AJAX、MVC、JQueryを使用した非同期データベース検索

私はデータベースでAJAXを使用して非同期検索を実行する方法を理解しようとしていますが、 "500内部サーバーエラー"が発生しています。私はいくつかのAJAXチュートリアルを行ってきましたが、どれもWeb開発のMVCメソッドを含んでいません。私はどこに、どのように情報を送る必要があるのか​​、少し失われています。

私が知っているのは、500 Server Errorは、クライアント側ではなくサーバ側で起こっていることを意味しています。コントローラが関与し始める時点でロジックが壊れていると推測します。それはちょうど初心者の推測です。

私は、関連するコードと思われるものをすべて貼り付けます。文脈については、データベース情報は私が練習のために取り組んできたモック銀行データベースの 'accounts'テーブルからのものです。

ありがとうございました。

はまず、ここでは今ここに関与コードだ

クローム

Internal Server Error 500にデバッグ情報を見たときに私が取得エラー情報です。

Javascriptを/ jQueryの:

var $j = jQuery.noConflict(); 

    var key = 0; 

    $j(function() { 

     $j("#search_btn").click(function() { 
      key = $j("#acc-id-search").val(); 
      searchAcc(); 
      return false; 
     })   
    }); 



    function searchAcc() { 

     var callback = function (data) { 

      $j("#account_data_table").empty(); 
      var htmlArray = []; 
      if (data.total > 0) { 
       $j.each(data.items, function (i, item) { 
        htmlArray.push("<tr>"); 
        htmlArray.push('<td class="text-center">' + item.account_id + '</td>'); 
        htmlArray.push('<td class="text-center">' + item.product_id + '</td>'); 
        htmlArray.push('<td class="text-center">' + item.cust_id + '</td>'); 
        htmlArray.push('<td class="text-center">' + item.open_date + '</td>'); 
        htmlArray.push('<td class="text-center">' + item.close_date + '</td>'); 
        htmlArray.push('<td class="text-center">' + item.last_activity_date + '</td>'); 
        htmlArray.push('<td class="text-center">' + item.status + '</td>'); 
        htmlArray.push('<td class="text-center">' + item.open_branch_id + '</td>'); 
        htmlArray.push('<td class="text-center">' + item.open_emp_id + '</td>'); 
        htmlArray.push('<td class="text-center">' + item.avail_balance + '</td>'); 
        htmlArray.push('<td class="text-center">' + item.pending_balance + '</td>'); 
        htmlArray.push("</tr>"); 
       }); 
      } 
      else { 
       htmlArray.push('<tr><td colspan="10">No results!</td></tr>'); 
      } 

      $j("#account_data_table").append(htmlArray.join('')); 
      alert("Sucess?"); 

     }; 
     alert("Searching for '" + key + "'"); 
     postData('@Url.Content("~/Accounts/Index")', key, callback, '#account_data_table'); 
    } 

    function postData(url, data, callback, lockObj, dataType, loadingMessage) 
    { 
     data = data || {}; 
     dataType = dataType || 'json'; 
     loadingMessage = loadingMessage || 'Loading...';; 
     var isLock = !!lockObj; 
     $.ajax({ 
      url: url, 
      data: data, 
      method: 'post', 
      dataType: dataType, 
      cache: false, 
      beforeSend: function(){ 
       alert("About to send"); 
      }, 
      success: callback, 
      error: function(){ 
       alert("Failed..!"); 
      }, 
      complete: function(){ 

      } 
     }); 
    } 

コントローラ 'Url.Content( "〜/アカウント/インデックス")@' ポイントへ:

[HttpPost] 
    public NewtonJsonResult Index(int key) 
    { 
     var _service = new BankEntities(); 
     var searchCondition = new account() { account_id = key }; 
     var resultObj = new AjaxDataResult(); 
     var allitems = _service.All(searchCondition); 
     var itemArray = new JArray(); 
     resultObj.total = allitems.Count(); 
     JObject temp; 
     foreach(var item in allitems) 
     { 
      temp = new JObject(); 
      temp["account_id"] = item.account_id; 
      temp["product_cd"] = item.product_cd; 
      temp["cust_id"] = item.cust_id; 
      temp["open_date"] = item.open_date; 
      temp["close_date"] = item.close_date; 
      temp["last_activity_date"] = item.last_activity_date; 
      temp["status"] = item.status; 
      temp["open_branch_id"] = item.open_branch_id; 
      temp["open_emp_id"] = item.open_emp_id; 
      temp["avail_balance"] = item.avail_balance; 
      temp["pending_balance"] = item.pending_balance; 
      itemArray.Add(temp); 

     } 
     resultObj.items = itemArray; 
     return new NewtonJsonResult(resultObj); 
    } 

'すべて(searchcondition')方法は、テーブル内の必要な項目を見つけるために使用されます:

public List<account> All(account acc) 
    { 
     var data = accounts.Where(x => x.status == "ACTIVE"); 
     if(acc.account_id != 0) 
     { 
      data = data.Where(x => x.account_id == acc.account_id); 
     } 
     return data.OrderBy(x => x.account_id).ToList(); 
    } 
+0

は 'dataTypeと削除してください:アヤックスからdataType'を必要とPARAM' key'がコントローラに渡され取得されていないように、思えます。 – User3250

+0

サーバのログを確認してください。サーバのエラーである可能性があります。 –

+0

@ User3250いいえ私は恐れていますが、それと同じ問題です。 「キー」パラメータが送信されていることを確認できる方法はありますか?私はコントローラ側でステップバイステップのデバッグプロセスを実行する方法を理解できません。 –

答えて

0

答えがコメントにある特別な感謝最初の質問の後にS:あなたは右 リクエストパラメータを設定していないので、

メソッドが呼び出されないことがありますが、そう何の方法は、したがって、要求500 エラーのために存在しません。あなたの現在のコードは、 を使わずにキー値を含めようとしており、リクエストパラメータ名を与えています。キー= $ j( "#acc-id-search")を変更してみてください。 to key = {key:$ j( "#acc-id-search")。val() }; (実際の要求は、パラメータ キー= thesearchvaluehereで終わるでしょう。)

関連する問題