2015-09-07 23 views
0

我在JavaScript中使用了AJAX,我想發送幾個參數,並在某些條件爲真時將按鈕值從鎖定設置爲解鎖。但它不起作用,我的意思是它不會去AJAX。我可以在JavaScript中使用ajax嗎?我已經使用它但不起作用

這裏是我的代碼,這是被稱爲一個按鈕的onclick功能:

<script type="text/javascript"> 
    function change() { 
     var elem = document.getElementById("lockId"); 
     var orderid = document.getElementById("order_no"); 
     if (elem.value == "Lock") { 
      $.ajax({ 
       type: 'POST', 
       data: {Lock_Id: 1, Order_No: orderid}, 
       url: '@Url.Action("LockClick","Orders")', 
       success: function (result) { 
        elem.value = "Unlock"; 
       } 
      }); 
     } else if (elem.value == "Unlock") { 
      $.ajax({ 
       type: 'POST', 
       data: {Lock_Id: 0, Order_No: orderid}, 
       url: '@Url.Action("LockClick","Orders")', 
       success: function (result) { 
        elem.value = "Lock"; 
       } 
      }); 
     } 
    } 
</script> 

幫助將非常理解,我可能什麼地方犯了一個錯誤。

+0

@ Url.Action(「LockClick」,「Orders」)看起來很可疑,它看起來像是將它從動態Web解決方案中剝離出來的,而不是JavaScript。什麼是您需要使用的實際URL? –

+1

你有包括jQuery嗎? – Rahul

+0

JQuery的要點是在JavaScript內使用它 - 這是一個JavaScript框架。我從來沒有見過類似@ Url.Action()的東西。 – OneRaynyDay

回答

1

首先,您需要將原生JavaScript數據對象轉換爲JSON。就這樣:

data:JSON.stringify({Lock_Id: 1, Order_No: parseInt(orderid)}) 

你也需要指定內容類型的AJAX請求:

contentType: 'application/json', 

而且你有以下的js代碼錯誤:

var orderid = document.getElementById("order_no") 
現在

中的OrderID你有對象,而不是元素的值。我假設你只是有簡單的html輸入字段。在這種情況下,你需要通過以下替換您的字符串:

var orderid = document.getElementById("order_no").value; 

你也需要解析的OrderID爲int,因爲它是從.value的之際,字符串,你希望在你的控制器的整數方法。

感謝您發佈控制器的代碼。它有幾個小錯誤。請使用下列字符串來解決:

public ActionResult LockClick(int Lock_Id, int Order_No, int cust_acctNo = 0, int store_id = 0) 
  1. 請確保您有確切命名方法的參數,因爲他們在客戶端的JavaScript命名 - 這將讓你的代碼更加嚴格和視覺。

  2. 我添加默認值cust_acctNo參數,因爲你從來沒有通過它從客戶端向服務器端的價值 - 在您的例子中,你只傳遞兩個參數,而不是三個。

現在它應該工作。

請在下面找到固定的javascript代碼:

<script type="text/javascript"> 
    function change() { 

     var elem = document.getElementById("lockId"); 
     var orderid = document.getElementById("order_no").value; 
     if (elem.value == "Lock") { 
      $.ajax({ 
       type: 'POST', 
       contentType: 'application/json', 
       data: JSON.stringify({ Lock_Id: 1, Order_No: parseInt(orderid) }), 
       url: '@Url.Action("LockClick","Index")', 
       success: function (result) { 
        elem.value = "Unlock"; 
       } 
      }); 
     } else if (elem.value == "Unlock") { 
      $.ajax({ 
       type: 'POST', 
       contentType: 'application/json', 
       data: JSON.stringify({ Lock_Id: 0, Order_No: parseInt(orderid) }), 
       url: '@Url.Action("LockClick", "Index")', 
       success: function (result) { 
        elem.value = "Lock"; 
       } 
      }); 
     } 

     return false; 

    } 
</script> 
+0

親愛的@Anton Norko它沒有給出任何錯誤,我已將警告放在更改函數中工作,但只有ajax不起作用,它不會將參數傳遞給我在url中提供的所需操作 –

+0

這是控制器中的操作: public ActionResult LockClick(int Lock_Id,int order_No,int cust_acctNo,int store_id = 0) _Orders Orders_ = new _Orders(); Orders_.UnLock_Lock_Trade_Order(1,order_No); (新的{controller =「Orders」,action =「Edit」,order_No = order_No,cust_acctNo = cust_acctNo,store_id = 8)));}返回RedirectToAction(null,new RouteValueDictionary) } –

+0

@Hamadkhan請參閱我的更新回答 –

-2

最後可能是orderId行缺失.value。應該是:

var orderid = document.getElementById("order_no").value; 
+0

謝謝,@ anton-norko。 [經過](http://jsfiddle.net/sergiks/0ru5LfkL/)。你是對的。錯誤的答案刪除。 – Serge

0

該問題可能是Ajax請求的url參數:

url: '@Url.Action("LockClick","Orders")',

如果你在瀏覽器的開發工具看,在網絡選項卡上,請求的實際URL是什麼?

腳本是否嵌入某種模板?模板是否在任何時候都被編譯並且該字符串被轉換爲實際的URL?

編輯

如果你把警報的if語句的每個分支內部,然後會發生什麼? elem.value等於什麼?這可能是type conversion of the loose equality operator==)的問題,具體取決於elem.value的類型。

+0

我已經把警報放在了完美工作的更改函數裏面,這意味着jquery有效,但問題出在ajax上,它不會被觸發 –

+0

已更新回答... – danwellman

相關問題