2015-11-04 48 views
1

我已閱讀所有關於同一問題的SO帖子,並嘗試過所有。顯然還有一些我做錯了。我可以將所有數據註銷到控制器。發佈數據總是空的,我不知道爲什麼。爲什麼發佈的數據完全爲空通過ajax發佈到CodeIgniter控制器?

jQuery的

function onDeleteThing(myId, callback) { 

    console.log(myId) // 10 

    $.ajax({ 
     'type': 'post', 
     'contentType': 'application/json', 
     'cache': false, 
     'data': {'id': myId}, 
     'url': '/my-url/delete', 
     'dataType': 'json', 
     'timeout': 50000 
    }).done(function (response) { 
     callback(response); 
    }).fail(function (error) { 
     // Total fail. 
    }); 
} 

控制器

public function delete() 
{ 
    if ($this->input->is_ajax_request()) { 
     error_log(print_r($this->input->post(), true)); // returns: Array() 
     // even using $_POST returns empty array 

     // here is an example of how I plan to send the post data to my model   
     if ($this->My_model->delete($this->input->post('data')) { 
      echo json_encode(array('status' => 'success')); 
     } else { 
      echo json_encode(array('status' => 'fail')); 
     } 
    } 
} 

但儘管如此,我遇到的問題是,$this->input->post('data')空當它到達我的控制器。

編輯

我也可以看到網絡選項卡:

Request Payload 
id=10 
+0

您的Ajax期待json響應,如果服務器沒有響應json和有效的json響應,響應將只是空的。你確定你的函數返回有效的json嗎?我不知道它在哪裏 – DelightedD0D

+0

嗨@ DelightedD0D,你是對的,我沒有回報任何東西......但是。由於某些原因,我無法訪問發送給我的控制器的發佈數據。在這一點上,我沒有數據發送到模型發送響應回我的控制器。在一個典型的表單中,我會使用'myform.serialize()'作爲數據屬性,一切都很好。在這種情況下,我不確定我在哪裏丟球。 – Damon

+0

@Stryner SO現在很重要。就是這樣。我需要將其更改爲「contentType」:'application/x-www-form-urlencoded; charset = UTF-8'',一切都很好。感謝您的時間!如果您將其作爲答案發布,我會將其作爲解決方案進行檢查。 – Damon

回答

0

的問題是,你在你的服務器發送矛盾的信息:

ContentType: "application/json" 
RequestBody: "id=10" // Not JSON 

如果您不需要發送json,一種解決方案是簡單地從$.ajax ca中刪除contentType選項因爲jQuery默認將它設置爲application/x-www-form-urlencoded; charset=UTF-8

如果您確實希望發送JSON,那麼您必須自己將其轉換爲JSON,因爲jQuery無法做到這一點。一種解決方案是使用JSON.stringify(並且如果您需要對IE7或更低版​​本的支持,則添加必要的polyfill)。

$.ajax({ 
    'type': 'post', 
    'contentType': 'application/json', 
    'cache': false, 
    'data': JSON.stringify({'id': myId}), 
    'url': '/my-url/delete', 
    'dataType': 'json', 
    'timeout': 50000 
})  
+0

謝謝你的幫助! – Damon