2016-07-30 40 views
0

快速背景:對web開發非常新穎。我有一個用戶可以填寫表單的引導頁面。有四個字段(兩個文本框,一個廣播,一個下拉)。這個想法是使用該輸入數據形成一個JSON並將其發佈到我的HTTP服務器,但它似乎沒有工作了。很奇怪,我的代碼在幾個小時前完美工作(已經使用requestb.in進行了測試)。 現在突然它(1)只發送POST,如果我有apiname和apiurl變量的長整型值,並且(2)不再看到我從無線電覆選框(env1 - env3)中選擇了什麼,而是總是認爲我選擇了「開發」,而不管實際選擇了什麼。 我假設我的問題是由jQuery的在我的代碼引起的,而不是HTML,所以我已經把它貼在這裏:jQuery HTTP Post停止工作,僅在輸入長字符串時才起作用

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js">  </script> 

    <script> 
    $(document).ready(function(){ 
     $("button").click(function(){ 
      var env1 = document.getElementById("seldevid"); 
      var env2 = document.getElementById("selstageid"); 
      var env3 = document.getElementById("selprodid"); 
      var apiname = $("#apinameid").val(); 
      var apiurl = $("#apiurlid").val(); 
      var actionvar; 
      $("#actionid").change(function() { 
      actionvar = $(this).val(); 
      }).change(); 
      if (env1.checked = true) { 
       var env = "Dev"; 
      } else if (env2.checked = true) { 
       var env = "Stage"; 
      } else if (env3.checked = true) { 
       var env = "Prod"; 
      } 
      $.post("http://requestb.in/107fmof1", 
      { 
       apiName: apiname, 
       apiURL: apiurl, 
       environment: env, 
       action: actionvar 
      }, 
      function(data,status){ 
       alert("Data: " + data + "\nStatus: " + status); 
      }); 

     }); 




    }); 
    </script> 

感謝您的幫助!

回答

0

第一個問題:爲什麼總是「開發」?

問題出在你的if語句中,你使用了一個賦值而不是布爾比較。您需要使用==來比較兩個值是否相等。相反,您正在設置env1.checked = true,該值爲true,因此env始終設置爲"Dev"

if (env1.checked == true) { 
    var env = "Dev"; 
} else if (env2.checked == true) { 
    var env = "Stage"; 
} else if (env3.checked == true) { 
    var env = "Prod"; 
} 

甚至

var env; 
if (env1.checked) { 
    env = "Dev"; 
} else if (env2.checked) { 
    env = "Stage"; 
} else if (env3.checked) { 
    env = "Prod"; 
} 

第二個問題:爲什麼不公佈?

你應該儘量簡化你的代碼位:

$(document).ready(function(){ 
    var env1 = document.getElementById("seldevid"); 
    var env2 = document.getElementById("selstageid"); 
    var env3 = document.getElementById("selprodid"); 

    $("button").click(function(){ 
     var env = "Dev"; 
     if (env2.checked) { 
      env = "Stage"; 
     } else if (env3.checked) { 
      env = "Prod"; 
     } 

     $.post("http://requestb.in/107fmof1", 
      { 
       apiName:  $("#apinameid").val(), 
       apiURL:  $("#apiurlid").val(), 
       environment: env, 
       action:  $("#actionid").val() 
      }, 
      function(data,status){ 
       alert("Data: " + data + "\nStatus: " + status); 
      } 
     ); 
    }); 
}); 

然後使用瀏覽器Developer Tools,看看究竟是被POST'd,如果有的話。

+0

嗯,這似乎解決了單選按鈕的問題,但它仍然不會一直開機自檢。我似乎甚至無法找到任何模式,但它並不POST,似乎完全是隨機的。我使用了開發人員工具,這表明幾乎總是有一個POST,但'參數'幾乎每次都是空的(所以HTTP服務器沒有收到任何東西)。 – user6656429

+0

一種可能性是您在執行$(document).ready(...)代碼之前提交表單。在這種情況下,如果您沒有爲表單域指定任何名稱,那麼您會看到一個空的POST。 – Andy

+0

在空POST的情況下,你是否看到apiName等字段,但它們是空的?或者你沒有看到POST數據?或者是什麼?另外,您的

標籤是否定義了操作和方法?如果是這樣,他們是什麼? – Andy