未捕获的SyntaxError:意外的令牌:使用jsonp回调

时间:2013-06-30 20:51:31

标签: ajax jsonp

我正在进行跨浏览器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"}

1 个答案:

答案 0 :(得分:3)

tldr; 服务器未发送回JSONP

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

在JavaScript控制台中尝试:

  

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

错误看起来很熟悉? (不同的浏览可以返回不同的错误消息:Chrome - &gt;“意外令牌:”,FireFox - &gt;“无效标签”,IE9 - &gt;“预期';'”。)

有效的JSONP结果类似于:

  

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

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

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

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

相关问题