(rails) пытается добавить AJAX, но ajax возвращает огромный блок try {..} catch {..} - PullRequest
0 голосов
/ 02 декабря 2009

Я добавляю ajax в проект rails. Я пытаюсь обновить div с содержимым части.

page.replace_html("chemicals",  :partial => "chemicals", :object => @chemicals)

Однако, это возвращает огромный блок try / catch вместо правильного повторного рендеринга партиала. Есть идеи, что происходит?

ошибка:

 try {Element.update("chemicals", "<table>\n  <tr>\n    <th> name</th>\n    <th>Cas</th>\n    <th>Amount</th>\n    <th>Units</th>\n    <th>Vendor</th>\n\t<th>Vendor email</th>\n\t<th>Vendor website</th>\n\t<th>Vendor phone</th>\n  </tr>\n\n\n\n  <tr>\n    <td>HCl</td>\n    <td><a href=\"http://chempedia.com/registry_numbers/\"></a></td>\n    <td>10</td>\n    <td>mL</td>\n    <td>Sigma-Aldrich</td>\n\t\n\t<td></td>\n\t<td>http://www.sigmaaldrich.com/sigma-aldrich/home.html</td>\n\t<td>800-325-3010</td>\n\t\n    <td><a href=\"/chemicals/28\">Show</a></td>\n    <td><a href=\"/chemicals/28/edit\">Edit</a></td>\n    <td><a href=\"/chemicals/28\" onclick=\"if (confirm('Are you sure?')) { var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;var m = document.createElement('input'); m.setAttribute('type', 'hidden'); m.setAttribute('name', '_method'); m.setAttribute('value', 'delete'); f.appendChild(m);var s = document.createElement('input'); s.setAttribute('type', 'hidden'); s.setAttribute('name', 'authenticity_token'); s.setAttribute('value', 'dQYsh4Kz2kIX92HT0Ove43rO+qdz+/y5aozZIcdMWeg='); f.appendChild(s);f.submit(); };return false;\">Destroy</a></td>\n  </tr>\n\n</table>");
} catch (e) { alert('RJS error:\n\n' + e.toString()); alert('Element.update(\"chemicals\", \"<table>\\n  <tr>\\n    <th> name</th>\\n    <th>Cas</th>\\n    <th>Amount</th>\\n    <th>Units</th>\\n    <th>Vendor</th>\\n\\t<th>Vendor email</th>\\n\\t<th>Vendor website</th>\\n\\t<th>Vendor phone</th>\\n  </tr>\\n\\n\\n\\n  <tr>\\n    <td>HCl</td>\\n    <td><a href=\\\"http://chempedia.com/registry_numbers/\\\"></a></td>\\n    <td>10</td>\\n    <td>mL</td>\\n    <td>Sigma-Aldrich</td>\\n\\t\\n\\t<td></td>\\n\\t<td>http://www.sigmaaldrich.com/sigma-aldrich/home.html</td>\\n\\t<td>800-325-3010</td>\\n\\t\\n    <td><a href=\\\"/chemicals/28\\\">Show</a></td>\\n    <td><a href=\\\"/chemicals/28/edit\\\">Edit</a></td>\\n    <td><a href=\\\"/chemicals/28\\\" onclick=\\\"if (confirm(\'Are you sure?\')) { var f = document.createElement(\'form\'); f.style.display = \'none\'; this.parentNode.appendChild(f); f.method = \'POST\'; f.action = this.href;var m = document.createElement(\'input\'); m.setAttribute(\'type\', \'hidden\'); m.setAttribute(\'name\', \'_method\'); m.setAttribute(\'value\', \'delete\'); f.appendChild(m);var s = document.createElement(\'input\'); s.setAttribute(\'type\', \'hidden\'); s.setAttribute(\'name\', \'authenticity_token\'); s.setAttribute(\'value\', \'dQYsh4Kz2kIX92HT0Ove43rO+qdz+/y5aozZIcdMWeg=\'); f.appendChild(s);f.submit(); };return false;\\\">Destroy</a></td>\\n  </tr>\\n\\n</table>\");'); throw e }

и когда я говорю, возвращает блок try / catch, это то, что отображается в браузере.

редактирование:

Часть проблемы может заключаться в том, что вместо перенаправления на localhost: 3000 / контроллер, в котором я запускал и нажимал кнопку удаления, я перенаправляю на localhost: 3000 / controller / id, где id - это идентификатор объект, который я удалил. есть идеи, что здесь происходит?

также правильно удаляет объект. это просто не вернется на нужную страницу. вот строка для ссылки «удалить», по которой я щелкаю, и контроллер для «удаления».

<td><%= link_to 'Destroy', chemical, :confirm => 'Are you sure?', :method => :delete  %></td>

и

# DELETE /chemicals/1
  # DELETE /chemicals/1.xml
  def destroy
    @chemical = Chemical.find(params[:id])
    @chemical.destroy
    @chemicals = Chemical.all
    respond_to do |format|
      #format.html { redirect_to(chemicals_url) }
      #format.xml  { head :ok }
      format.js
    end
  end

(я сделал химикаты со скриптом / создаю химикаты для строительных лесов)

1 Ответ

3 голосов
/ 02 декабря 2009

Хотя javascript используется для обработки запросов POST / PUT / DELETE, запросы, инициируемые link_to, по-прежнему ожидают HTML и отображают ответ, как если бы он получил HTML.

Вместо этого вы должны использовать link_to_remote, который знает, чтобы выполнить все, что он получает, при условии, что он получил Javascript. Это будет делать то, что вы ожидаете:

<%= link_to_remote 'Destroy', :url => {:id => chemical.id, :action => :destroy}, 
      :confirm => 'Are you sure?', :method => :delete  %></td>

P.S. Возвращенный в браузер javascript не будет помещен в этот гигантский блок try в рабочем режиме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...