2013-02-05 109 views
2

我試圖張貼表單數據使用JQuery到遠程servlet。 我可以看到服務器接收到數據,並返回狀態碼200和「{result:'success'}」 的響應字符串但是,ajax調用不會返回已完成或失敗的函數(如果我添加總是發揮比我可以看到,它被調用) 下面是客戶端的代碼片段:JQuery ajax()完成/失敗回調沒有返回狀態200

`

var dataParams = 'email='+email+'&password='+password; 
var url = 'http://127.0.0.1:8888/signup'; 

var jxhr = $.ajax({ 
    type : "POST", 
    url : url, 
    data : dataParams,// serializes the form's elements. 
    dataType: "json", 
    done: function() { 
    console.log("done!"); 
    hideSignUp(); 
    showThankYou(); }, 
    fail: function() { 
    console.log("fail!"); 
     } 
    }); 

`

好像我就會錯過了什麼,但似乎無法找到什麼。 請注意,我正在使用JQuery 1.8.3,因此成功已被棄用。 有什麼想法?

+0

嘗試**成功**而不是**完成**和**錯誤**而不是**失敗**。 – Dim13i

+0

@ Dim13i - 我已經嘗試過了,順便說一句 - 我使用的是JQuery 1.8.3,因此它的成功已經被棄用了。 –

+1

您是否打開了控制檯,查看是否有任何請求錯誤,如同源?如果成功沒有被調用,錯誤應該被調用。 '失敗'作爲'$ .ajax'的選項沒有記錄,我從未嘗試過這種方式,所以我不知道它是否有效。如前所述,它應該是'錯誤'和'成功'。 「成功」和「錯誤」選項不折舊,只有「jqXHR」的匹配方法折舊。 (例如,'$ .ajax(...)。success()' –

回答

4

嘗試:

var url = "http://127.0.0.1:8888/signup"; 
var jxhr = $.ajax({ 
    type : "POST", 
    url : url, 
    data : dataParams,// serializes the form's elements. 
    dataType: "json" 
    }).done(function() { 
    console.log("done!"); 
    hideSignUp(); 
    showThankYou(); 
    }).fail(function(jqXHR, textStatus) { 
    console.log(textStatus); 
}); 
+1

你應該在.fail中記錄參數,這樣原因也會被記錄下來,否則這些信息是非常沒用的。 –

+0

@KevinB I've更新了我的回答。 – idmean

+0

第三個是最重要的,它會是那個說「parseerror」的人 –

0

嘗試鏈接你的回調,而不是將它們設置爲對象字段:

$.ajax({ 
    type : "POST", 
    url : url, 
    data : dataParams,// serializes the form's elements. 
    dataType: "json" 
    }).done(function (xhrResponse) { 
    console.log("done!"); 
    hideSignUp(); 
    showThankYou(); 
    }).fail(function (xhrResponse, textStatus) { 
    console.log(textStatus); 
    }).always(function() { 
    console.log("I'm done with this."); 
    }); 

通過鏈接你的回調,你能保證至少一個(完整)的執行。

+0

這正是@idmean提出的。對不起,重複 – eggmatters

相關問題