2017-05-24 52 views
0

我試圖讓AJAX請求分發到位於DefaultController.csAJAX調用不叫MVC方法,並返回成功

var booking = { price: price, distance: distance } 
$.ajax({ 
    contentType: "application/json; charset=utf-8", 
    data: JSON.stringify({ booking: booking }), //Turns into: "{\"booking\":{\"price\":\"56.1376\",\"distance\":\"35086\"}}" 
    url: "/Default/submitBooking", 
    cache: false, 
    success: function (data) { alert("success " + data.d) }, 
    error: function (XMLHttpRequest, textStatus, errorThrown) { if (errorThrown != 'abort') debugger; } 
}) 

它返回一個success undefined MVC方法,並在submitBooking()沒有斷點方法被擊中。

public ActionResult submitBooking(Booking booking) 
{ 
    return Json(new { success = true, message = "Booking success" }, JsonRequestBehavior.AllowGet); 
} 

Booking類:

public class Booking 
{ 
    decimal price; decimal distance; 
    public decimal Price 
    { 
     get { return price; } 
     set { price = value; } 
    } 
    public decimal Distance 
    { 
     get { return distance; } 
     set { distance = value; } 
    } 
} 
+0

你確定這個URL:「/默認/ submitBooking」是正確的URL的操作方法?你在瀏覽器上遇到任何js問題嗎? –

+0

如果在那裏列出錯誤,請檢查瀏覽器控制檯。在Chrome右鍵單擊 - >檢查 - >控制檯 –

+2

您的返回對象將是沒有'd'屬性的'{success = true,message ='預訂成功}}'。 – nurdyguy

回答

1

的問題是,因爲你的行動與successmessage性能返回JSON。然後,您的JS代碼嘗試從名爲d的響應中讀取一個屬性,該屬性不存在,因此您看到的值爲undefined

爲了解決這個問題,你只需要修改你的JS代碼來讀取響應正確的屬性:

var booking = { price: price, distance: distance } 
$.ajax({ 
    contentType: "application/json; charset=utf-8", 
    data: { booking: booking }, // no need to JSON.stringify here, jQuery does it for you 
    url: "/Default/submitBooking", 
    cache: false, 
    success: function (data) { 
    console.log(data.success); 
    console.log(data.message); 
    }, 
    error: function (XMLHttpRequest, textStatus, errorThrown) { 
    if (errorThrown != 'abort') 
     debugger; 
    } 
}) 
+0

即使您的更改,方法('submitBooking()')沒有被擊中,我認爲這必須與預訂類相關。 – Tiago

+0

嘗試發送只是'數據:預訂'而不是 –

+0

嗨,如果仍然你的控制器操作方法沒有達到,那麼你的網址的問題,所以嘗試像這樣的網址:'@ Url.Action(「PostActionName」,「ControllerName」)' , –