2012-05-31 71 views
9

我有一個通過AJAX提交表單的表單:remote => true。縱觀服務器日誌和螢火,我得到的響應200 OK和它的形式返回JSON:jQuery ajax:即使響應正常也會運行錯誤200

{ "email": "[email protected]"} 

然後,我有兩個處理程序:

$('#new_invitation').bind("ajax:success", function(event, data, status, xhr) { 
    alert('test'); 
}); 

$('#new_invitation').bind("ajax:error", function() { 
    alert('error'); 
}); 

即使我回來一個200OK,它是錯誤處理程序觸發。我設法讓成功處理程序工作的唯一時間是當我在標題中發送200個空響應時。

我想不通爲什麼這個心不是工作:-S

編輯1 ------------ 做了這些改變後:

$('#new_invitation').bind("ajaxSuccess", function(event, data, status, xhr) { 
    alert('test'); 
}); 

$('#new_invitation').bind("ajaxError", function(jqXHR, textStatus, errorThrown) { 
alert('error'); 
    console.log(jqXHR.responseText); 
    console.log(textStatus.responseText); 
    console.log(errorThrown.responseText); 
}); 

我仍然得到相同的錯誤。日誌的東西給我:

undefined 
[email protected] 
undefined 

這裏是窗體的代碼(標準的Rails的東西):

<%= form_for @shoot.invitations.new, :url=>shoot_invitations_path(@shoot), :remote => true, :html => {:class => 'form-inline'} do |f| %> 
    <%= f.text_field :email, :'placeholder' => 'ex: [email protected]' %> 
    <%= f.text_field :role, :'placeholder' => 'ex: Photographer' %> 
    <%= f.submit "Invite", :class => 'btn btn-success' %> 
<% end %> 

EDIT 2 ---------

我做幾個變化,現在看來我的錯誤是一個解析錯誤。我不明白,因爲這是我從服務器獲取(data.responseText),這似乎都好後面的JSON:

{"email":"[email protected]"} 

答案--------- 我設法把一切工作當我在表單選項中輸入:'data-type'=>:json時。我嘗試過這一點,並沒有奏效,因爲我把它放在的form_tag選項,而不是HTML選項...

+0

向我們展示你的Ajax請求。 –

+2

console.log所有三個參數,更可能是你越來越parseerror這將意味着無效的JSON。 –

+0

Kevin =>我甚至沒有迴應JSON。我起初做了,但不是我只是渲染一個文本字符串,它仍然失敗。 – Alain

回答

1

使用ajaxSuccess,而不是ajax:successajaxError而不是ajax:error您的事件類型。

在這裏看到:http://docs.jquery.com/Ajax_Events

+0

呃..我不確定這個。它說ajaxError是一個全局事件 - 我認爲它的目的是使用它來全局記錄錯誤,或者顯示和隱藏處理圖標。通常,您希望錯誤回調爲本地並附加到原始ajax調用。此外,由於這個問題被問到錯誤回調已被棄用,首選Deferred.fail(http://api.jquery.com/deferred.fail/) –

+0

@Simon_Weaver,OP表明它是答案的一部分。當時,它不被棄用。 –

+0

這就是爲什麼我說'另外,因爲這個問題被問......':-) 我不確定你的意思是作爲答案的一部分,雖然 –

8
  1. 檢查$阿賈克斯的數據類型設置爲JSONP

  2. 嘗試返回{電子郵件: 「[email protected]」}

+0

沒有電子郵件周圍的引號 – jsshah

+0

我發現我的問題(編輯問題),我給你+1,因爲你是把我帶到它的人。 – Alain

2

JSON.parse('')會引發錯誤。對我來說,這是愚蠢的,它應該返回undefined。 我將此代碼添加到我的應用程序

#HACK JSON.parse('') should return undefined, not throw an error 
_parse = JSON.parse 
JSON.parse = (str) => 
    unless str == '' 
    _parse.apply JSON, arguments 

或ü窮人不使用CoffeeScript的(未經測試)

//HACK JSON.parse('') should return undefined, not throw an error 
var _parse = JSON.parse 
JSON.parse = function(str) { 
    if (str !== '') 
    return _parse.apply(JSON, arguments); 
    else 
    return undefined; 
} 
相關問題