2014-04-16 51 views
0

使用Trakt.tv API。它看起來像我發送有效的JSON,因爲我能夠進行身份驗證,但我收到的回報是一個解析錯誤。

Resource interpreted as Script but transferred with MIME type text/html: 
http://api.trakt.tv/recommendations/shows/myApiKeyCompleteNumbers?callback=jQuery111000155555475132972_1397674204444&{%22username%22:%22userName%22,%22password%22:%22mySha1PassComplete%22}&_=1397674207093 

Uncaught SyntaxError: Unexpected identifier 

回報說:

Disallowed Key Characters. 

我使用: jQuery的1.11.0

預先感謝任何幫助或指導

$(document).ready(function() { 

    function success(data) { 
     alert('data: ' + data); 
    } 

    var traktUser = 'myUserName'; 
    var traktHash = 'mySha1Password'; 
    var traktApi = 'myApiKey'; 
    var data = { 
     'username': traktUser, 
     'password': traktHash 
    }; 
    var postData = JSON.stringify(data); 
    var apiUrl = 'http://api.trakt.tv/recommendations/shows/' + traktApi; 

    $.ajax({ 
     type: 'POST', 
     url: apiUrl, 
     data: postData, 
     contentType: 'application/json', 
     dataType: 'jsonp', 
    }). 
    done(success); 

}); //document ready 

回答

1

你可以用」 t使用JSONP發出POST請求,jQuery忽略POST指令併發出GET請求。

您的數據正在被放置在查詢字符串中,並且網址編碼不正確。

服務器正在響應包含錯誤消息的HTML文檔,而不是根據JSONP規則格式化的JavaScript腳本。


看起來你試圖使用的API根本不支持JSONP。由於您在請求中傳遞自己的用戶憑據,這是有道理的。 JSONP是一種解決由瀏覽器實現的同源策略的攻擊手段(現在我們可以使用CORS來代替),除非您希望最終用戶瀏覽器直接訪問API,否則沒有意義使用它。由於最終用戶瀏覽器在未提供用戶名和密碼的情況下無法訪問它,因此似乎不打算以這種方式使用它。

改爲從服務器上的API處理數據。

+0

但是我怎麼做一個跨域請求?如果我不使用jsonp,我會得到401未授權的@Quentin –

+0

您可以要求提供API的人員具備哪些機制來支持跨源請求。 (正如答案中所提到的,看起來他們不希望你將憑據提供給用戶,因此他們的瀏覽器可以直接發出請求)。 – Quentin

+0

謝謝。這使我在正確的道路上@Quentin –