2011-12-19 101 views
0

的作品我有這樣的代碼:錯誤,但在舊版本

$.ajax({ 
    url: "http://example.com/auth", 
    type: "POST", 
    data: "username=example&password=mypasswd", 
    success: function(returned) { 
     // do stuff 
    }, 
    error: function(returned) { 
     console.log(returned); 
    } 
}); 

它工作正常使用jQuery 1.3.2,我前一段時間寫的,但在更新後1.7.1今天,它返回這個:

Object { readyState=0, status=0, statusText="error"} 

我無法得到它的工作。我究竟做錯了什麼?

+0

我想看看這個辦法是...它是怎麼在1.3.2工作?瀏覽器拒絕跨域的Ajax請求。 – 2011-12-19 18:59:36

+0

我相信你需要使用jsonp進行跨域請求。 – JesseBuesking 2011-12-19 19:02:28

+0

這裏是一個小提琴,演示了跨域ajax請求在1.3.2中不起作用http://jsfiddle.net/Tentonaxe/bpb5B/ – 2011-12-19 19:03:14

回答

0

我沒有看到你的代碼,你告訴jQuery的AJAX函數,它正在進行跨域調用。嘗試在$.ajax()通話將dataType : 'jsonp'作爲選項之一:使用JSONP的JSON塊

$.ajax({ 
    url  : "http://example.com/auth", 
    dataType : 'jsonp', 
    type  : "POST", 
    data  : "username=example&password=mypasswd", 
    success : function(returned) { 
     // do stuff 
    }, 
    error : function(returned) { 
     console.log(returned); 
    } 
}); 

負荷。添加額外的「?callback =?」到您網址的末尾 以指定回叫。除非高速緩存 選項設置爲true,否則通過向URL追加 查詢字符串參數「_ = [TIMESTAMP]」來禁用高速緩存。

來源:http://api.jquery.com/jquery.ajax/

+0

'jsonp'雖然不能輸入'POST'。除非他的服務器端代碼被寫爲接受'GET'參數而不是'POST',否則這不可能是它在'1.3.2'中的工作方式。在jQuery 1.3.2中,如果你沒有設置你要求jsonp,它會失敗(根據我寫的一些小的測試案例)。 – 2011-12-19 19:07:44

0

這是因爲跨域政策。您需要配置您的服務器才能接受之前的選項呼叫。

更多細節,可以發現: https://en.wikipedia.org/wiki/Cross-origin_resource_sharing

+0

請給出關於如何實現跨域請求的更多細節,或者您只需提到評論中已經提到的內容 – 2015-10-09 18:46:04