4

私は次のスパンを持っています:

<span class='username'> </span>

これを設定するには、PHP から値を取得する必要があるため、Ajax を使用します。

    $('.username').html(getUsername()); 
    function getUsername(){
    $.ajax({
        type: 'POST',
        url: myBaseUrl + 'Profiles/ajax_getUsername',
        dataType: 'json',
        data: {

        },
        success: function(data){
            document.write(data);
        }
    })
}

デバッグすると、返されたデータ ( data) が正しい値であることがわかりますが、spanタグ間の html は同じままです。

私は何を間違っていますか?

少し更新

私は次のことを試しました:

    function getUsername(){
    $.ajax({
        type: 'POST',
        url: myBaseUrl + 'Profiles/ajax_getUsername',
        dataType: 'json',
        data: {

        },
        success: function(data){
            $('.username').html('RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRr');
        }
    })
}

getUsername();

まだタグ間にhtmlはありません(テキストなし)が、コンソールを見るとメソッドが完了して実行されています。

ちょっとしたアップデートへの答え

エラーは私の Ajax 関数にあり、実際の応答を出力するのを忘れていました! この質問を探している人のために、すべての回答に感謝します。ここに私の Ajax 関数があります。

    public function ajax_getUsername(){
    if ($this->RequestHandler->isAjax())
    {
        $this->autoLayout = false;
        $this->autoRender = false;
        $this->layout = 'ajax';
    }
    print json_encode($this->currentClient['username']);

}

私はCakePHPを使用しているため、いくつかの組み込みメソッドがあることに注意してください。全体として、ただ覚えておいてくださいprint json_encode($this->currentClient['username']);

4

6 に答える 6

9

コードのロジック フローが正しくありません。非同期関数は、応答を受信するまでに実行が次のステートメントに移動するため、何も返すことができません。代わりに、応答に必要なすべての処理をsuccessハンドラーで行う必要があります。これを試して:

function getUsername() {
    $.ajax({
        type: 'POST',
        url: myBaseUrl + 'Profiles/ajax_getUsername',
        dataType: 'json',
        data: { },
        success: function(data){
            $('.username').html(data); // update the HTML here
        }
    })
}

getUsername();
于 2013-08-28T12:23:44.720 に答える
1

関数 getUsername の return ステートメントを追加します。

       var result = "";
        $('.username').html(getUsername()); 
        function getUsername(){
        $.ajax({
            type: 'POST',
            url: myBaseUrl + 'Profiles/ajax_getUsername',
            dataType: 'json',
            data: {

            },
            success: function(data){
                document.write(data);
                result = data;
            }
        })
          return result;
    }
于 2013-08-28T12:28:16.997 に答える
1

.load() API
ドキュメントを使用できます: http://api.jquery.com/load/
あなたの場合:

$('.username').load(myBaseUrl + 'Profiles/ajax_getUsername',
                    {param1: value1, param2: value2});
于 2013-08-28T12:30:20.993 に答える