[英]Rails render partial Ajax Error BUT correct response shown in Debugger
我正在嘗試使用不引人注目的Javascript在現有鏈接上觸發附加的ajax查詢。
Query將進入服務器並進行處理,為測試返回字符串“javascript template ok”。
但是,ajax“成功”功能從未被調用過。 在適當的位置,它是觸發的“錯誤”功能......
我查看了Chrome調試器,我可以看到從服務器返回的響應文本,但從來沒有被稱為“成功”的方法...... :-(
我的電話是
jQuery.ajax({
type: 'POST',
success: function(response) {
$("#details").html(response);
console.log(response);
},
error: function(){
alert("Error\nData could not be retrieve from the server");
},
url: '/treeview/show/1538.js',
cache: false,
});
(在此示例中,url被編碼)。 瀏覽器中的相同Url獲取沒有布局的正確數據:-)
刪除url中的“.js”會返回帶有布局的html模板,並且正確地實現了“details”div的更新...
控制器是
respond_to do |format|
format.html # show.html.erb
format.js { render :inline => "JAVASCRIPT TEMPLATE !" }
end
謝謝
編輯:
這是從ajax查詢返回的對象(錯誤的第一個參數:function(jqXHR)):
Object
abort: function ( statusText ) {
always: function () {
complete: function () {
done: function () {
error: function () {
fail: function () {
getAllResponseHeaders: function () {
getResponseHeader: function ( key ) {
overrideMimeType: function ( type ) {
pipe: function ( /* fnDone, fnFail, fnProgress */ ) {
progress: function () {
promise: function ( obj ) {
readyState: 4
responseText: "JAVASCRIPT TEMPLATE !"
setRequestHeader: function ( name, value ) {
state: function () {
status: 200
statusCode: function ( map ) {
statusText: "OK"
success: function () {
then: function ( /* fnDone, fnFail, fnProgress */ ) {
__proto__: Object
所以我得到了正確的回復文本?? !! 哪里可以出錯呢? :-s
您沒有為jQuery.ajax
顯式指定dataType
選項,因此jQuery將其推斷為script
(依賴於Rails提供的MIME類型)。 自JAVASCRIPT TEMPLATE !
不是有效的Javascript語句,拋出了解析器錯誤。 調用success
回調而不是error
有兩種選擇:
將dataType
明確指定為text
:
jQuery.ajax({
type: 'POST',
dataType: 'text',
// ...
});
或者從控制器返回有效的Javascript:
respond_to do |format|
format.html # show.html.erb
format.js { render :inline => "{}" }
end
您是否認為響應可能會被評估為javascript代碼並因此拋出一個被捕獲的錯誤?
到你的ajax電話,添加
dataType: 'json',
和,控制器
format.js render :text => { :some_data => "JAVASCRIPT TEMPLATE !" }.to_json
編輯錯誤調用以將錯誤數據傳遞給DOM:
error: function(data){ console.log(data); }
然后你會看到到底發生了什么。
這是你應該做的:
$.post('/treeview/show/1538.js', function(response, data){
$("#details").html(data.responseText);
}).error(function(){
alert("Error\nData could not be retrieve from the server");
})
在控制器中可選
respond_to do |format|
format.html # show.html.erb
format.js { render text: "JAVASCRIPT TEMPLATE !" }
end
試試吧。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.