2013-06-30 47 views
1

我正在製作一個跨瀏覽器的jsonp調用,其中我發送一些值的後端是使用django並在回調到我的前端,這是在php中。問題是它給出Uncaught SyntaxError: Unexpected token :錯誤數據正在從Django發送,我已經檢查過。我使用下面的代碼,使JSONP調用未捕獲的SyntaxError:意外的令牌:使用jsonp回調

$(document).on('click', '.miloginme', function(event) { 

     var username = $('#username').val(); 
     var password = $('#password').val(); 
     var token = $('#token').val(); 
var dataString="uid="+username+"&token="+token;  

$.ajax({ 
type: 'POST', 
url: "http://localhost:8000/b/authenticate/", 
crossDomain: true, 
data: dataString, 
async: false, 
dataType: 'jsonp', 
success: function(data) { 
    alert(data); 
} 
}); 


}); 

在回調我得到的值是格式

{"token": "KAMWMS151UWPR4Q", "authenticate": "1", "userid": "brad", "fname": "rahul", "booster_number": "1"} 

回答

3

tldr;服務器不發回JSONP

在帖子中報告的值是JSON(並且它是有效的JSON) - 它是而不是 JSONP。如果它被視爲JSONP(即由<script>評估),那麼它將是語法錯誤,因爲它是而不是有效的JavaScript程序。

試試這個在JavaScript控制檯:

{"token": "KAMWMS151UWPR4Q", "authenticate": "1", "userid": "brad", "fname": "rahul", "booster_number": "1"}

錯誤眼熟? (不同的瀏覽器可能會返回不同的錯誤消息:Chrome - >「意外的標記:」,FireFox - >「無效標籤」,IE9 - >「預期」;'「)

有效的JSONP結果看起來類似於:

theCallback({"token": "KAMWMS151UWPR4Q", "authenticate": "1", "userid": "brad", "fname": "rahul", "booster_number": "1"})

( - 例如jQuery的 - 的theCallback名稱從jsonp變量傳遞到服務器和客戶機採取之前創建injecting <script> element使得該函數可以使用上述的語法被調用創建該功能。)

有效 JSON因爲「JSON」數據然後在表達式上下文(它被視爲有效的JavaScript對象文本)中運行,而不是語句上下文(它被視爲標籤,然後「某些垃圾」導致語法錯誤)。

的常用方法從Django的返回JSONP利用View Decorators

+0

我用返回的HttpResponse(json.dumps(response_data_inner),MIME類型=「應用/ json「)在django是這個casuing問題? – user1001176

+0

@ user1001176這確實是不正確的,因爲它返回JSON,但*不* JSONP。我添加了更多細節和相關鏈接。 – user2246674

+0

剛剛爲我節省了一些痛苦,無法弄清楚爲什麼測試網址正在工作,而我的實時數據不是。謝謝@ user2246674 :) – Horse

相關問題