2013-04-07 51 views
0

我有一個使用VB.NET MVC作爲服務器端代碼的Web應用程序。我設置了客戶端JavaScript來輕鬆地向服務器控制器功能發送和接收數據。基本上我做的是創建一個JavaScript「請求」對象,它使用Ajax調用控制器函數並傳入參數。我讓MVC爲我做所有的序列化。然後控制器函數返回一個JSON,通常以一個HTML塊作爲字符串。由於我在一個地方處理所有的ajax調用,所以我找不到處理響應的好方法。當ajax響應返回時,我無法知道它來自哪個請求。該網站有很多事情要做,所有的迴應都需要以不同的方式處理,並且都會返回不同的數據。處理多個aiax請求和響應的最佳方式是什麼?

現在我所做的是在控制器功能中,我發回一些關鍵字以及HTML塊,然後在ajax complete函數中檢查所有這些特定的鍵。這樣做使JavaScript代碼難以管理。

var postData = { id=0 }; 
$.ajax({ 
    type: "POST", 
    url: "/Controller/Action/" 
    data: postData 
}).done(function (data) { 
    if (data.Foo) { 
    Foo(data); 
    } else if(data.Bar) } 
    Bar(data); 
    } 
}); 

我遇到了麻煩,因爲我不知道要查找哪些關鍵字。我想我會嘗試做一些我在ajax done函數中動態調用函數名稱的地方,但我想知道是否有任何現有的庫或代碼示例執行像這樣的大規模ajax請求函數。

回答

0

也許問題來自「在一個地方做所有事情」的想法。我可以想象,一旦你在一種方法中有40個鏈接if...else if...,維護你的代碼將會非常困難。畢竟分裂東西可能不會傷害。

無論如何,按照您希望的方式執行此操作的一種方法是,將代替傳遞一個鍵,將javascript函數的名稱作爲委託進行傳遞。然後在done()中撥打window[data.funcName](data);

說你的JSON是

{ 
    foo: "bar", 
    funcName: "DoMyFoo" 
} 

這是你的電話怎麼會是這樣的:

var postData = { id=0 }; 
$.ajax({ 
    type: "POST", 
    url: "/Controller/Action/" 
    data: postData 
}).done(function (data) { 
    window[data.funcName](data); 
}); 

function DoMyFoo(d){ 
    //Do your specific stuff here 
    alert(d.foo); 
} 

見信息和示例這個問題How to execute a JavaScript function when I have its name as a string

編輯:如果你的職責就在於一個對象實例,而不是全局命名空間內,說obj,你可以把它以同樣的方式與obj['myFunction'](args)

相關問題