3

ここに私のコードがあります:これはビューから選択された要素を取得し、そのIDをAjaxリクエストとしてコントローラーに送信するjavascriptファイルです。

function getData (id, e) {

    if(window.XMLHttpRequest) {

        xmlHttp = new XMLHttpRequest();
    }
    else {

        xmlHttp = new ActiveXObject('Microsoft.XMLHTTP');
    }

    xmlHttp.onreadystatechange = function () {

        if(xmlHttp.readyState == 4 && xmlHttp.status == 200) {

            alert('yes');
        }else{

            alert('no');
        }
    }

    xmlHttp.open('POST', '/BrandDetail/returnPdetails', true);
    xmlHttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
    xmlHttp.send(id);
    e.preventDefault();

}
});

これは、リクエストを取得していないか、応答していないコントローラーです。

class BrandDetailController extends AppController {

public $name = 'BrandDetail';

 function returnPdetails () {

    $id = $_POST['id'];
    $data = $this->brandDetail->find('all', array('conditions' => array('brandDetail.id' => $id)));
}
}
4

1 に答える 1

1
  1. モデルではなく、ajax送信からコントローラーを呼び出す必要があります。パスを複数形にする

    xmlHttp.open('POST', '/BrandDetails/returnPdetails', true);

  2. 送信関数で渡されるパラメーターは、キーと値である必要があります

    xmlHttp.send("id="+id);

  3. 実際には、ajax 応答のビューにデータや文字列を送信していません。コントローラーでは、コントローラーに送信されるかどうかわからないデータを操作する前に、少なくともテスト文字列をビューに送信します。

    関数 returnPdetails(){

    $id = $this->params['named']['id'];

    $data = $this->BrandDetail->findById($id);

    pr('リクエストが機能しているかどうかをテストするテキスト'); }

  4. ここに従って、readystatechange関数を大文字にするべきではありません

    xmlhttp.onreadystatechange

  5. xmlhttp.onreadystatechange 関数でエラーをキャッチして、問題を絞り込みます。readyState が 0、1、2、または 3 の場合もステートメントに入れます。これはデバッグに役立ちます。

于 2012-12-03T09:00:38.500 に答える