2015-10-20 3 views
0

Как преобразовать этот андроид код нижеPOST alamofire параметр массива

for (int i = 0; i < items.size(); i++) { 
     mParams.put("items[" + i + "][id]", items.get(i).getType().getId()); 
     mParams.put("items["+i+"][note]", items.get(i).getNote()); 
    } 

Свифта для alamofire.

следующий мой код, но он не работает:

for var i = 0; i < self.survey.items.count; i++ { 
      parameters["items[\(self.survey.items[i].type?.id)]"] = [ 
       "[id]": self.survey.items[i].id, 
       "[note]": self.survey.items[i].note 

       ] 

      print(self.survey.items[i].id) 
     } 

-

parameters выглядит следующим образом:

parameter: [ 
    "items[0][id]": 3, 
    "items[1][note]": Pen, 
    "lat": 3.070235299720939, 
    "status_id": 1, 
    "items[3][id]": 3, 
    "name": Bih, 
    "lng": 101.6110375110495, 
    "items[2][id]": 4, 
    "items[0][note]": Keychain, 
    "items[3][note]": Keychain, 
    "is_avocated": 1, 
    "items[2][note]": Pen, 
    "items[1][id]": 4 
] 

мне удалось добавить только 1 с

parameters["items"] = [[ 
      "id": 4, 
      "note": "Pen" 

     ]] 

, но как только я сделал это

parameters["items[0]"] = [[ 
      "id": 4, 
      "note": "Pen" 

     ]] 

Это не добавляет :(Again без ошибок

Последней редактирования: на стороне сервера (Laravel) ожидает

$items = Input::get('items', []); 
foreach ($items as $key => $item) { 
     //$survey->items()->attach($item['id'], ['note' => $item['note']]); 
     $sItem = new SurveyItem; 
     $sItem->survey_id = $survey->id; 
     $sItem->item_id = $item['id']; 
     $sItem->note = $item['note']; 
     $sItem->created_by = Auth::user()->id; 
     $sItem->save(); 
    } 
+0

может быть непосредственно 'parameters [" items [\ (self.survey.items [i] .type? .id)] [id] "] = self.survey.items [i] .id'? – njzk2

+0

Я пробовал это, но он не работает :( – Happiehappie

+0

(a) определить «не работает»; (b) показать нам, что 'параметры' выглядели, когда вы это делали. – Rob

ответ

1

Свифта эквивалента ваших Android код будет:

var parameters = [String:String]() 

for var i = 0; i < survey.items.count; i++ { 
    parameters["items[\(i)][id]"] = survey.items[i].id 
    parameters["items[\(i)][note]"] = survey.items[i].note 
} 

Или, вы также можете сделать:

var parameters = [String:AnyObject]() 
for var i = 0; i < survey.items.count; i++ { 
    parameters["items[\(i)]"] = ["id" : survey.items[i].id, "note" : survey.items[i].note] 
} 

Когда вы отправляете запрос, убедитесь, что вы проверить на наличие ошибок, например:

Alamofire.request(.POST, url, parameters: parameters) 
    .responseJSON { response in 
     switch (response.result) { 
     case .Failure(let error): 
      print("error: \(error)") 
     case .Success(let responseObject): 
      print("responseObject: \(responseObject)") 
     } 
} 

-

Вы говорите, что следующие работы:

parameters["items"] = [[ "id": 4, "note": "Pen" ]] 

Это создает корпус, который выглядит так:

items%5B%5D%5Bid%5D=4&items%5B%5D%5Bnote%5D=Pen 

Который, когда процент побегов удаляют, выглядит следующим образом:

items[][id]=4&items[][note]=Pen 

Принимая во внимание мои выше примеры генерации:

items%5B0%5D%5Bid%5D=4&items%5B0%5D%5Bnote%5D=Pen 

Ie:

items[0][id]=4&items[0][note]=Pen 

Как интерпретировать ваш Android код , последний должен быть правильного формата. Я не могу примирить ваш код Android с результатами ваших тестов.

+0

Я пробовал это, но он не прошел :(Я могу сделать это на cocoarestclient, хотя :( Я использую Alamofire 3.0, если это имеет значение – Happiehappie

+0

Пробовал последнее редактирование :(То же самое. – Happiehappie

+0

Это любопытно, потому что кажется это оба способа построить запрос, похожий на ваш запрос на андроид. Не видя необработанного запроса на андроид (например, наблюдаемого в Чарльзе) или не видя код сервера, я не могу вам помочь. – Rob