1

私はjquery ajaxが初めてです。私は CakePHP で作業しており、次のことを行う必要があります。7 つのリンクがあります。sun, mon, tue, wed, ...

各リンクのonclickで、そのリンクのテキストをコントローラーでアクセスできる配列に保存したいと思います。jquery ajaxを使用してこれを行いたいです。

以下は、機能していない私のコードです(jquery ajaxテストコード):

<?php
    echo $this->Html->link('sun', 
    array('onclick' => 'callAjax();'), 
    array('class' => 'dayss'));
?>
<script>
function callAjax() {

        $.ajax({ 
            url: "rideoffers/ride_offer",
            type: "POST",
            success: function() {
            console.log("hi");
            },
            error: function() {
            console.log("error");
            }
        });
return true;
}
</script>    

上記のコードは、hi または error を出力しません。どこが間違っていますか?どうすれば解決できますか?

編集:ディペッシュ・パーマー

    <pre>CakeRequest Object
(
    [params] => Array
        (
            [plugin] => 
            [controller] => Rideoffers
            [action] => ride_array
            [named] => Array
                (
                )

            [pass] => Array
                (
                )

        )

    [data] => Array
        (
        )

    [query] => Array
        (
        )

    [url] => Rideoffers/ride_array
    [base] => /carpooling
    [webroot] => /carpooling/
    [here] => /carpooling/Rideoffers/ride_array
    [_detectors:protected] => Array
        (
            [get] => Array
                (
                    [env] => REQUEST_METHOD
                    [value] => GET
                )

            [post] => Array
                (
                    [env] => REQUEST_METHOD
                    [value] => POST
                )

            [put] => Array
                (
                    [env] => REQUEST_METHOD
                    [value] => PUT
                )

            [delete] => Array
                (
                    [env] => REQUEST_METHOD
                    [value] => DELETE
                )

            [head] => Array
                (
                    [env] => REQUEST_METHOD
                    [value] => HEAD
                )

            [options] => Array
                (
                    [env] => REQUEST_METHOD
                    [value] => OPTIONS
                )

            [ssl] => Array
                (
                    [env] => HTTPS
                    [value] => 1
                )

            [ajax] => Array
                (
                    [env] => HTTP_X_REQUESTED_WITH
                    [value] => XMLHttpRequest
                )

            [flash] => Array
                (
                    [env] => HTTP_USER_AGENT
                    [pattern] => /^(Shockwave|Adobe) Flash/
                )

            [mobile] => Array
                (
                    [env] => HTTP_USER_AGENT
                    [options] => Array
                        (
                            [0] => Android
                            [1] => AvantGo
                            [2] => BlackBerry
                            [3] => DoCoMo
                            [4] => Fennec
                            [5] => iPod
                            [6] => iPhone
                            [7] => iPad
                            [8] => J2ME
                            [9] => MIDP
                            [10] => NetFront
                            [11] => Nokia
                            [12] => Opera Mini
                            [13] => Opera Mobi
                            [14] => PalmOS
                            [15] => PalmSource
                            [16] => portalmmm
                            [17] => Plucker
                            [18] => ReqwirelessWeb
                            [19] => SonyEricsson
                            [20] => Symbian
                            [21] => UP\.Browser
                            [22] => webOS
                            [23] => Windows CE
                            [24] => Windows Phone OS
                            [25] => Xiino
                        )

                )

            [requested] => Array
                (
                    [param] => requested
                    [value] => 1
                )

        )

    [_input:protected] => 
)
</pre>
4

3 に答える 3

0

これが解決策です。

コードは以下のとおりである必要があります。

echo $this->Html->link('sun', array(),array('onclick' => 'callAjax();','class' => 'dayss'));

の2番目の引数Html->linkはforであり、その中にイベントhrefを割り当てます。onclick

コメントへの回答

<script type="text/javascript">
function callAjax()
{
    var textString = $(this).text();
    $.ajax(
    {
        url: "rideoffers/ride_offer",
        type: "POST",
        data : textString,
        success: function()
        {
            console.log("hi");
        },
        error: function()
        {
            console.log("error");
        }
    });
}
</script>

コントローラ

<?php

    function ride_offer()
    {
        //to test data is passed as needed.
        pr($this->params);
        exit;
    }
于 2013-02-12T07:58:25.563 に答える
0

urlパラメータが正しいかどうかわかりません:

url: "rideoffers/ride_offer"

それは...ですか?ajax を使用せずにリクエストを複製して、目的の結果を得ることができますか (たとえば、GET を使用して ajax ターゲット URL に同じリクエストを受け入れさせ、その出力をテストします)。

そうでない場合は、コンソールが台無しになっている可能性がありますか? コンソールの代わりにアラートを使用してデバッグ行をダンプしてみてください:

例えば

alert("hi")
于 2013-02-12T07:04:09.973 に答える
0

イベントを追加return false;してonclick、ajax 自体を返すようにしてください。

<?php
   echo $this->Html->link('sun',  
   array('class' => 'dayss'));
?>
<script>
 $(function(){
   $('.dayss').on('click', callAjax);
 });

 function callAjax() {
    return $.ajax({ 
        url: "rideoffers/ride_offer",
        type: "POST",
        success: function(data) {
        console.log("hi");
        console.log(data);
        },
        error: function() {
        console.log("error");
        }
    });
  }
</script> 
于 2013-02-12T07:06:22.860 に答える