2016-01-03 84 views
1

我在Ajax/Jquery中有這段代碼,我試圖向我的API請求一個PUT方法。在我的代碼中,我試圖發送已在我的文本字段中更新的數據。這些數據應該由API接收,並將其發送給Model,它應該用來根據已收到的ID更新數據庫中的記錄。出於某種原因,控制器中的REST API未從我的文本字段接收值。Rest Api PUT方法沒有收到值

代碼我在哪裏發送數據:

$("#edit").on("click", function() { 
    var updatedData ={ question: $('#questionField').val(), 
         image: $('#imageField').val(), 
         answer1: $('#answer1Field').val(), 
         answer2: $('#answer2Field').val(), 
         answer3: $('#answer3Field').val(), 
         answer4: $('#answer4Field').val(), 
         }; 
     $.ajax({ 
       url : '../admincontroller/getdatabasedata/', 
       type: 'PUT', 
       dataType: 'json', 
       data: updatedData, 

       success: function(updatedQuestion) 
       { 
       JSON.stringify(updatedQuestion); 
       if(updatedQuestion.ok == 1) { 
        alert("Succesfully edited"); 
       } 
       else{ 
        alert(updatedQuestion.ok); 
       } 
       } 
      }); 
    return false; 
    }); 

代碼爲我的REST API,其中數據應該被接收:

else if ($this->input->server('REQUEST_METHOD') == 'PUT') 
      { 
        $id = $this->input->post('idField'); 
        $question = $this->input->post('questionField'); 
        $image = $this->input->post('imageField'); 
        $answer1 = $this->input->post('answer1Field'); 
        $answer2 = $this->input->post('answer2Field'); 
        $answer3 = $this->input->post('answer3Field'); 
        $answer4 = $this->input->post('answer4Field'); 

if($question != '' && $image != '' && $answer1 != '' && $answer2 != '' && $answer3 != '' && $answer4 != ''){ 
         $this->adminmodel->updateQuestion($id,$question,$image,$answer1,$answer2,$answer3,$answer4); 
         echo json_encode(array('ok' => 1)); 
        } 
        else{ 
         echo json_encode(array('ok' => $question)); 
        } 

      } 

此刻我想提醒,看看數據已通過,但我只是得到NULL。任何想法爲什麼?謝謝。

+0

我知道那不是你所要求的,但是如果你想要創建一個REST API,你似乎會走向一個錯誤的方向。你不應該使用「PUT」,而更可能使用「POST」,因爲你不想創建或更新一個實體到它的URI,應該使用什麼PUT! PUT也具有冪等性,你的行爲似乎不是。此外,URI「getdatabasedata」根本不是RESTful。 URI中不應該有動詞。在REST中,動詞是可以放在任何實體或它各自的URI上的HTTP方法,所以URI應該是「/ databasedata /」。見例如http://www.restapitutorial.com – Robert

回答

0

我認爲數據需要是一個字符串。對象轉換爲查詢字符串,這是你在這裏看到的。

數據:JSON.stringify(updatedData),而不是updatedData

+0

我應該如何在我的REST API中的另一端? – Otonel

0

按照類似的數據結構,合同和參數名。如果使用基本類型將它們傳遞給url,或者標記api函數中正文中發送的基本類型。 使用JSON.stringify(object)作爲Ajax調用發送對象的數據。 確保在服務器上啓用了http動詞。