2015-12-13 58 views
0

有沒有辦法使一個函數轉換爲默認的ajax函數。重新ajax函數

這是AJAX功能,我有

$.ajax({ 
    type: "POST", 
    url: "http://" + document.location.host + '/userajax', 
    data: 'type=register&name=' + name, 
    beforeSend:function() { 

    }, 
    success: function(response) { 

    } 
}); 

這是我希望它看起來像

ajax('url', { 
    method: 'get', 
    parameters: { 
     name: $('#name').val() 
    }, 
    beforeSend: function() { 

    }, 
    success: function(transport) { 

    } 
}); 

伊夫試圖在互聯網上搜索,但沒有發現任何東西

+0

只是想知道這是否可能,我該怎麼做。 – 8803286

+0

如果您的問題「我可以編寫調用另一個函數的函數」而不是答案是......否則不清楚您遇到了什麼問題。 –

回答

1

當然,你可以創建這樣的功能:

function ajax(url, params){ 

    // everything is now available here 
    console.log(url); // output: http://www.google.com 

    // you can get the data of the params object like this 
    console.log(params.method); // output: get 

    // you can execute the beforeSend like this: 
    params.beforeSend(); 

    // additionally you might want to check everything. 
    // maybe if the method is NOT set, you want it to always use GET 
    switch(arguments.length) { 
     case 1: url = throw new Error('Url should be set'); 
     case 2: params.method = 'get'; 
     case 3: break; 
     default: throw new Error('illegal argument count') 
    } 

} 

你會調用此類似:

ajax('http://www.google.com', { 
    method: 'get', 
    parameters: { 
     name: $('#name').val() 
    }, 
    beforeSend: function() { 
     // some function 
    }, 
    success: function(transport) { 
     // some function 
    } 
}); 
+0

謝謝!做了一些編輯,它的作品完美。 – 8803286

-1

我不這麼認爲。但你可以這樣做:

$(document).ready(function(){ 

    var parameters = { 
      name:  $("#name").val(), 
      desc:  $("#desc").val() 

     }; 

     $.ajax({ 
      url: 'path/to/file', 
      data : parameters, 
      beforeSend: beforeSubmit, 
      dataType: "json", 
      type : 'POST', 
     }) 
     .done(function(data) { 


     }) 
     .fail(function() { 
      console.log("error"); 
     }) 
    }) 

另外請注意,我不呼叫直接設置功能爲beforeSend,我將創建一個externe功能這給了我更多的自由。

,所以我可以這樣做:

function beforeSubmit(){ 
    if(something !== 'somethingelse'){ 
     return false; //ajax call will stop 
    }else{ 
     return true; //ajax call 
    } 
} 
+0

這只是jQuery ajax函數,而不是OP要求的正確內容? –

+1

你是完全正確的,我誤解了問題的真正棘手方面。我必須真正學會更客觀,不要急於求成。 – Franco

-1

這當然是可能的,這只是一些工作。您需要的一些基本信息:

首先,您需要對XMLHTTPRequest API有一個很好的理解,您可以在MDN上找到關於該信息的更多信息。

接下來,找出如何進行回調,實際上很簡單,您可以傳遞一個匿名函數引用作爲函數的選項或屬性。這是這樣的:

function doSomething(variable, callback){ 
    variable = variable + ' something'; // just doing something with the variable 
    callback(variable); 
} 

// then call the function with a callback (anonymous function) 
doSomething('doing', function(result){ alert(result); }); 

你應該得到一個警告,說'做些事情'。

最後,您應該知道如何讀取對象,並在ajax函數中作爲'選項'傳遞。假設你有這樣的功能:

function foo(url, options){ 
    console.log(url); 
    console.log(options.method); 
    console.log(options.parameters.name); 
} 

// call it like this 
foo('https://google.com/', { 
    method: 'get', 
    parameters: { 
     name: 'myName' 
    } 
}); 

這應該在控制檯中記錄URL,方法和參數。

現在從這裏開始,你應該把所有的東西拼在一起。祝你好運!

+0

這是爲什麼被拒絕?我認爲我回答了問題的每個方面,而沒有編寫OP的預製代碼..?只是一個很好的起點。 –