如何为所有AJAX链接编写一个jquery函数

时间:2010-07-17 16:48:10

标签: javascript jquery ajax json zend-framework

我在windows上使用zend框架。我想第一次在我的项目中实现ajax。我搜索了帮助并创建了一个非常简单的ajax功能。

IndexController.php

public function indexAction() {
}

public function oneAction() {
}

public function twoAction() {
}

index.phtml

<script type="text/javascript" src="js/jquery-1.4.2.js"></script>
<script type="text/javascript" src="js/AJAX.js"></script>

<a href='http://practice.dev/index/one' class='one'>One</a>
<a href='http://practice.dev/index/two' class='two'>Two</a>
<br /><br />
<div id="one">one.phtml content comes here</div>
<div id="two">two.phtml content comes here</div>

AJAX.js

jQuery(document).ready(function(){
    jQuery('.one').click(loadOne);
    jQuery('.two').click(loadTwo);
});

function loadOne(event) {

    event.preventDefault();

    jQuery.ajax({
        url: '/index/one',
        success: function( data ) {
                    jQuery('#one').html(data);
                    }
    });
}

function loadTwo(event) {

    event.preventDefault();

    jQuery.ajax({
        url: '/index/two',
        success: function( data ){
                    jQuery('#two').html(data);
                    }
    });
}

上面的代码正在工作,并且当点击其链接时,分别在“一个”和“两个”DIV中加载one.phtml和two.phtml的数据。您可以看到我必须为每个链接创建单独的jquery函数,并且还必须为每个链接标记添加新类。

我想做什么?

我想对所有AJAX请求只使用一个jquery函数,并且不想在该函数中硬编码 url success 属性。

当我将“AJAX”类添加到任何链接标记时,它应该使用AJAX加载内容。

感谢。

3 个答案:

答案 0 :(得分:8)

在div中简单加载数据我会使用加载方法

<强> HTML

<script type="text/javascript" src="js/jquery-1.4.2.js"></script>
<script type="text/javascript" src="js/AJAX.js"></script>

<a href='http://practice.dev/index/one' class='ajax' rel="one">One</a>
<a href='http://practice.dev/index/two' class='ajax' rel="two">Two</a>
<br /><br />
<div id="one">one.phtml content comes here</div>
<div id="two">two.phtml content comes here</div>

<强> JS

jQuery(document).ready(function(){
    jQuery('.ajax').click(function(event){
       event.preventDefault();

       var target = '#' + jQuery(this).attr('rel');
       var href = jQuery(this).attr('href');
       jQuery( target ).load( href );

      });
});

使用单个类来标识应使用ajax调用而不是正常使用的所有链接。并为包含容器div的rel的链接添加id属性。

答案 1 :(得分:0)

也许这个:

function loadData(url, callback) {
    jQuery.ajax({url: url, success: callback});
}

loadData('/index/one', function( data ) {
    jQuery('#one').html(data);
})

loadData('/index/two', function( data ) {
    jQuery('#two').html(data);
})

为了使这个更加紧凑,您可以为两者定义相同的回调,然后让处理程序决定应该将响应数据写入哪个元素。

答案 2 :(得分:0)

紧凑版:

$(function(){
    $('.one').click(loadOne);
    $('.two').click(loadTwo);
});

function loadOne(event) {
    event.preventDefault();
    $('#one').load('/index/one');
}

function loadTwo(event) {
    event.preventDefault();
    $('#two').load('/index/two');
}