2013-06-27 122 views
0

當我發佈參數到服務器時,jQuery負載的回調函數不會執行。當提供參數時,jQuery加載的回調不會觸發?

這將導致服務器錯誤,但回調函數執行:

chassisLookupDialog.load('../Workflow/FindChassisDialog/', function (response, status, xhr) { 

    console.log("Response", response, status, xhr); 

    chassisLookupDialog.open(); 
}); 

這個作品中,PARAMATERS到服務器並不會引發錯誤,但回調函數不執行:

chassisLookupDialog.load('../Workflow/FindChassisDialog/', { 
     dataCenterID: dataCenterID, 
     bladeTemplateID: bladeTemplateID, 
     selectedChassisID: selectedChassisID, 
     selectedSlotNumber: selectedSlotNumber 
    }, function (response, status, xhr) { 

    console.log("Response", response, status, xhr); 

    chassisLookupDialog.open(); 
}); 

這裏是我的控制器:

public ActionResult FindChassisDialog(int dataCenterID, int bladeTemplateID, int selectedChassisID, int selectedSlotNumber) 
{ 
    FindChassisDialogModel findChassisDialogModel = new FindChassisDialogModel(); 

    return View("FindChassisDialog", findChassisDialogModel); 
} 

,如果我檢查服務器我的看法是,所有的HTML都是正確的。不知道爲什麼我的回調不會執行...任何想法?

這需要與視圖的作爲錯誤數據的HTML錯誤事件:

$.ajax({ 
    type: 'POST', 
    dataType: 'json', 
    url: '../Workflow/FindChassisDialog/', 
    data: { 
     dataCenterID: dataCenterID, 
     bladeTemplateID: bladeTemplateID, 
     selectedChassisID: selectedChassisID, 
     selectedSlotNumber: selectedSlotNumber 
    }, 
    success: function (data) { 
     console.log("Success:", data); 
    }, 
    error: function (error) { 
     console.error("Error:", error); 
    } 
}); 
+0

當提供參數時,'load'方法將請求作爲'post'發送,當參數不存在時,'load'將請求作爲'get'方法發送。可能是你的服務器無法處理'post'方法。 – Jashwant

+0

是的,同意,只是不知道如何/爲什麼。我看到響應成功返回,沒有錯誤或失敗的請求。我只是看到它返回的視圖,然後從未打回調。我有其他的工作示例,我發送1個參數,並且工作正常。我還沒有發現差異。 –

+0

嘗試使用'$ .ajax'的'complete'和'success/error'事件 – Jashwant

回答

1

在你$.ajax要求擺脫下面一行:

dataType: 'json', 

我的意思是,你是在告訴jQuery的此AJAX請求將返回JSON,但您從控制器操作返回HTML(return View(...))。所以當jQuery試圖將其解析爲JSON時,它顯然會彈出,你的回調將永遠不會執行。

所以:

$.ajax({ 
    type: 'POST', 
    url: '../Workflow/FindChassisDialog/', 
    data: { 
     dataCenterID: dataCenterID, 
     bladeTemplateID: bladeTemplateID, 
     selectedChassisID: selectedChassisID, 
     selectedSlotNumber: selectedSlotNumber 
    }, 
    success: function (data) { 
     console.log("Success:", data); 
    }, 
    error: function (error) { 
     console.error("Error:", error); 
    } 
}); 

順便說一句,像硬編碼,一個URL是完全錯誤的:

url: '../Workflow/FindChassisDialog/', 

你應該總是在ASP.NET MVC應用程序使用的網址助手打交道時與網址。

還有一件事:爲什麼你從一個控制器操作中返回一個完整的視圖(而不是部分),這個操作被AJAX調用?

+0

我之前使用過$ .load,但是......當然我應該可以在傳遞多個參數的同時加載一個視圖。我明白爲什麼$ .ajax由於dataType而無法工作,並且我知道如何手動加載HTML響應,但我感到震驚如果我需要傳遞多於1個參數,MVC不會爲我執行此操作。 –

+0

而且我也明白這些網址是可怕的,但我在技術債務下工作(整個項目是在MVC1中創建的,並且已經慢慢升級)。目前我無法將它們全部標準化。 –

+0

好的,那麼當你從'$ .ajax'調用中除去'dataType:'json''設置時發生了什麼?另外,你在技術債務下工作的事實絕對不是減少債務的藉口。就個人而言,如果我看到這樣的硬編碼網址,我甚至會想在繼續爲這個項目做出貢獻之前立即改進它。這絕對不是項目在ASP.NET MVC 1下創建的藉口。即使在該版本中,也有可能已經使用的Url。*助手。 –

相關問題