1

我正在进行跨浏览器 jsonp 调用,其中我发送一些值的后端使用django并在回调到我的前端(在 php 中)后获取一些。问题是它给出Uncaught SyntaxError: Unexpected token :的错误数据是从 django 发送的,我已经检查过了。我正在使用下面的代码进行 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"}
4

1 回答 1

3

tldr; 服务器没有发回JSONP

帖子中报告的值是 JSON(它是有效的 JSON)——它不是JSONP。如果它被视为 JSONP(即由 a 评估<script>),那么它将是一个语法错误,因为它不是一个有效的 JavaScript 程序。

在 JavaScript 控制台中试试这个:

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

错误看起来很眼熟?(不同的浏览器会返回不同的错误信息:Chrome -> “Unexpected token :”、FireFox -> “invalid label”、IE9 -> “Expected ';'”。)

有效的 JSONP 结果类似于:

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

(名称theCallback取自传递给服务器和客户端的变量 - 例如 jQuery - 在创建注入元素jsonp之前创建此函数,以便可以使用上述语法调用该函数。)<script>

有效的 JSONP 有效,因为“JSON”数据然后在表达式上下文中运行(在其中它被视为有效的 JavaScript 对象文字),而不是在语句上下文中(它被视为标签,然后是“一些垃圾”导致语法错误)。

从 Django 返回 JSONP 的常用方法是使用View Decorators

于 2013-06-30T20:55:26.993 回答