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

换成这个

success: function(data){
    $('.username').text(data);
}
于 2013-08-28T12:24:59.950 回答
1

在成功方法中,您应该使用以下内容:

$(".username").text(data);
于 2013-08-28T12:25:06.183 回答
1

您应该在回调中设置 html

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

        },
        success: function(data){
            $('.username').html(data);
        }
    })
}
于 2013-08-28T12:25:08.120 回答
1

为函数 getUsername 添加返回语句

       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 回答