如何使用此jquery ajax最小化代码的重复?

时间:2011-08-30 01:51:07

标签: jquery

我在页面上有很多功能,下面的代码完全相同,除了正在发送的数据,以及显示结果的成功div。例如:

一个ajax帖子:

$.ajax({
    type: 'POST',
    url: 'unique_file.php',
    data: {qty: 2, item_id: 13},
    cache: false,
    success: function(data) {
       $('#return_div').html(data);
    }
});  

另一个ajax帖子:

$.ajax({
    type: 'POST',
    url: 'another_unique_file.php',
    data: {no_shipping: 4},
    cache: false,
    success: function(data) {
      $('#a_different_div').html(data);
    }
});

所以我认为把它变成像这样的函数是理想的

function do_ajax(post_file,results_div,post_data) {
$.ajax({
    type: 'POST',
    url: post_file,
    data: {post_data}, // this doesn't appear to work
    cache: false,
    success: function(data) {
      $(results_div).html(data);
    }
});
}

然后我可以像这样实现#1 ajax:

do_ajax('unique_file.php','#return_div','qty: 2, item_id: 13');

这对我来说似乎合乎逻辑,但我的逻辑限制是如何将数据导入我的函数。也许post_data不仅仅是一个类似的字符串,而是更像是:

do_ajax('purchase_create.php','#create_purchase_window','item_id:'+$item_id+', qty: '+$qty+'');

这看起来很混乱......但大多数情况下,它只是不起作用。是否有更简洁的方法可能将所有数据放入数组并将其提供给函数?

2 个答案:

答案 0 :(得分:2)

您可以使用ajaxSetup设置默认值。

$.ajaxSetup({
  cache: false,
  type: 'POST'
});

然后

$.ajax({
    url: post_file,
    data: {post_data: post_data}, // this doesn't appear to work
    success: function(data) {
      $(results_div).html(data);
    }
});

{post_data}语法不正确。所以我将其更改为{post_data: post_data}

答案 1 :(得分:1)

你走在正确的轨道上:

function do_ajax(post_file,results_div,post_data) {
$.ajax({
    type: 'POST',
    url: post_file,
    data: post_data,
    cache: false,
    success: function(data) {
      $(results_div).html(data);
    }
});
}

do_ajax('purchase_create.php, '#create_purchase_window', {
    item_id: 3,
    qty: 2
});

您正在将对象传递给POST,因此只需将该对象传递到do_ajax函数中并将其传递。