2

私はHMVCcodeigniterを使用しています。初めてjqueryajaxを使おうとしています。POSTを使用すると、GETの使用中にデータに応答するときに、未定義のエラーが発生します。

         $.ajax({
          type: "POST",
          url: filelink+"cart/add_cart_item",
          data: {"product_id":id,"quantity":qty,"ajax":"1"},
          dataType: "json",
              success: function(msg){
           alert( "Data Saved: " + msg );
           },
               error: function(jqXHR, textStatus, errorThrown){ 
           alert(textStatus + " " + errorThrown);
            }
      });

グーグルとSO-ingの後に私がこれまでに試したこと-

  1. 私のファイルのURLの場所に直接アクセスできます。確認しました。応答を与える。

  2. Firebugは、同じファイルに対して500の内部サーバーエラーを出します。

  3. Getを使用すると、返事が返ってきます

  4. データ型にjsonを追加しました

コントローラ機能

  class Cart extends CI_Controller { // Our Cart class extends the Controller class

  function __construct()
     {
    parent::__construct();  
    $this->template->set('controller', $this);
     }

  function _remap()
    {
       $uri2 = $this->uri->segment(2);  
       if (is_numeric($uri2) OR $uri2 == FALSE) {
        $this->index(); 
       } else if ($uri2 == 'add_cart_item') {
        $this->add_cart_item();
       } else if ($uri2 == 'show_cart') {
        $this->show_cart();
       }
     }

function add_cart_item(){
      echo "asdfsadfdsf";
      exit; 
    }
  }

誰か助けてくれませんか?

4

4 に答える 4

0

あなたの問題には考えられる理由があります

ロードされていないモデルを使用している可能性があります。
モデルにコードの問題がある可能性があります。
モデルから何も返さず、エコーしない可能性があります。
また、データを戻す必要がある場合は、echo json_encode($ data)を使用してください

于 2012-06-28T12:29:13.523 に答える
0

この問題は、サイトをhttps://example.comとしてロードしたが、ajax呼び出しのURLがhttp://example.comである場合に発生することがあります。

于 2012-06-28T12:30:01.313 に答える
0

_remap 関数を使用し、$uri2 を取得した後、ajax リクエストで渡した数量変数をチェックする if チェックがあり、明らかなように整数値が含まれている可能性があります。そこに

$this->uri->segment();

あなたを返します:

product_id=id
quantity=qty
ajax=1

そして、あなたは呼び出して量である値2を取ります

$uri2 = $this->uri->segment(2); 

数量を返しますが、コードで index() 関数を定義していないため、500 エラーが発生します

function _remap()
{
   $uri2 = $this->uri->segment(2);  
   if (is_numeric($uri2) OR $uri2 == FALSE) {
    $this->index(); 
   } else if ($uri2 == 'add_cart_item') {
    $this->add_cart_item();
   } else if ($uri2 == 'show_cart') {
    $this->show_cart();
   }
 }
于 2012-07-02T08:09:39.650 に答える
0

解決策を見つけることができました。この問題は、FORM と共に送信される CI_TOKEN が原因でした。それは存在せず、どの POST メソッドが 500 Internal server Error を与えていたのかが原因でした。ビューファイルに以下を追加しました。

 <?php echo form_open_multipart(); ?>
 <?php echo form_close(); ?>

ajaxポストリクエストでci_tokenを送信しました。

 var ci_token = formObj.find('input[name=ci_token]').val();
 var qty = 1;
 var dataString = 'product_id='+ id + '&quantity=' + qty + '&ajax=' + 1 
 +'&ci_token=' +            ci_token;

これで問題は解決しました。よくわかりませんが、これはCSRF関連の問題と呼ばれています

ありがとう

于 2012-06-29T12:41:47.597 に答える