事件传播和ajax发布

我有以下代码:
<div id="parentDiv">
    <a href="someurl"> ... </a>
</div>
div中的HTML来自外部源,我不知道它的结构,也无法控制它。 点击此链接后,我需要发布一些数据。所以我在div元素上添加了一个onclick事件处理程序,希望事件将传播,并使用jQuery ajax函数发布数据。 这在所有浏览器中运行良好,但Safari - 它不会返回任何错误,调用回调函数但由于某种原因无法到达服务器。每次收到请求时我都会写入数据库。试图在浏览器中手动加载帖子网址 - 工作正常,并在db中创建记录。还尝试了FF和Chrome - 按预期工作。 当向回调函数发出警报时,它被调用但在Safari data = null中。
$('#parentDiv').delegate( 'a', 'click', function()
{
    $.post('posturl', 
        { param1: 'test'}, 
        function(data)
        { 
            alert('data = '+data);
        },
        "json"
    );
});
期望AJAX在这种情况下工作是否正确?这个问题有更好的解决方案吗? 谢谢!     
已邀请:
这听起来像你需要将
delegate
与异步AJAX结合起来。请注意,这几乎不是一件好事 - 唯一真正的例外是您希望在离开页面之前立即执行AJAX请求。 您的代码可能如下所示:
$('#parentDiv').delegate( 'a', 'click', function()
    $.ajax({
      type: 'POST',
      url: 'posturl',
      { param1: 'test'}, 
      dataType: 'json',
      async: false
    });
});
这将等待POST请求完成后再继续关注链接。请注意,这优于在成功回调中使用
location = url
,因为此解决方案允许正常的浏览器操作,如中键点击正常。     
你想看看jQuery的
.delegate()
方法。它告诉一个元素监听从某个元素冒出来的某个事件,并在观察到它时执行行为。您还希望阻止链接的默认操作,并在ajax操作完成时将浏览器发送到链接。 文档:http://api.jquery.com/delegate/ 示例代码:
$( '#parentDiv' ).delegate( 'a', 'click', function( e )
{
    var url = this.href;

    e.preventDefault();

    $.post(
        'posturl', 
        {
            param1: 'test'
        },
        function(data)
        {
            alert('data = ' + data);
            window.location = url;
        },
        'json'
    );
} );
这个: 委派活动 防止默认 等待ajax的回应 发送浏览器链接 演示:http://jaaulde.com/test_bed/dasha_salo/     

要回复问题请先登录注册