jQuery - replaceWith进行ajax调用之间的区别,反之亦然

时间:2012-03-16 13:19:33

标签: javascript ajax jquery

假设我想对服务器进行ajax调用,并使用响应替换现有文档内容的一部分。是否有理由选择其中一种方法而不是另一种?

选项1 - 进行ajax调用,并从错误/成功函数执行replaceWith。例如:

$.ajax({
      type      :  'GET',
      url       :  '/some/path/here',
      success   :  function(data) {
        // process data here
        $('#container').replaceWith(processedData);
      }
});

选项2 - 调用replaceWith,传入一个进行ajax调用的函数。例如:

$("#container").replaceWith(function(){
    var responseData;
    $.ajax({
      type      :  'GET',
      url       :  '/some/path/here',
      success   :  function(data) {
        // process data here
        responseData = processedData;  // 
      }
    });
    return responseData;
});

2 个答案:

答案 0 :(得分:4)

第二个不是一个选择。当你取出这个功能时;

function(){
    var responseData;
    $.ajax({
      type      :  'GET',
      url       :  '/some/path/here',
      success   :  function(data) {
        // process data here
        responseData = processedData;  // 
      }
    });
    return responseData;
}

这将返回undefined。因为,当时间函数运行并返回时,reponseDataundefined。仅在将来的某个时间,success函数执行并设置responseData。但是,您的replaceWith代码已经完成执行。

选择选项1.

答案 1 :(得分:2)

选项1是您唯一的选择,因为选项2不起作用,因为调用将异步执行。这意味着你的功能永远不会返回任何东西。

如果您希望外部处理从AJAX调用返回的数据,只需将success参数设置为您要执行的函数的参考:

$.ajax({
    type: 'GET',
    url: '/some/path/here',
    success: processData
});

function processData(data) {
    // process data here
    $('#container').replaceWith(data);
}