jQuery的post方法没有返回响应数据

8
我有这段代码。
$(document).delegate('#login', 'pageinit', function(event) {

console.log('inside login page')
$('#loginform').submit(function() {

    // Get the value of the username and password
    var myusername = $("#username").val();
    var mypassword = $("#password").val();

    // Post to the login route
    $.post(global_urlstub + '/customer_login', {username: myusername, password: mypassword}, function(data) {

        alert(data);
        console.log(data);
        if (data.flag == true) {
            alert('123');
            console.log(data);
            jQuery.mobile.changePage('#page1');
        }
        else {
            alert('12345');
            console.log(data);
            $('#errmsg_login').html(data.msg);
        }

    }, "json" );

    return false;

});

我的服务器返回一个带有键 flag 的哈希值。然而,这段代码没有将数据返回给控制台或弹出窗口,尽管post请求成功了。我做错了什么?

});

(无需翻译)

3个回答

4

当您的服务器未返回有效的JSON时,就会发生这种情况。

首先尝试不使用datatype,如下所示...

$.post(global_urlstub + '/customer_login', {username: myusername, password: mypassword}, function(data) {

            alert(data);
            console.log(data);
            if (data.flag == true) {
                alert('123');
                console.log(data);
                jQuery.mobile.changePage('#page1');
            }
            else {
                alert('12345');
                console.log(data);
                $('#errmsg_login').html(data.msg);
            }

        });

3
我同意Hemant_Negi的看法,这可能是您的服务器未返回有效的JSON数据造成的问题。以下是基于您的代码并更换了URL的可行示例(新的URL会返回有效的JSON数据):
var myusername = 'a', mypassword = 'b';
$.post('http://ip.jsontest.com', {username: myusername, password: mypassword}, function(data) {
    alert(data.ip);
    console.log(data);
    if (data.flag == true) {
        alert('123');
        console.log(data);
        jQuery.mobile.changePage('#page1');
    }
    else {
        alert('12345');
        console.log(data);
        $('#errmsg_login').html(data.msg);
    }
}, "json" ).fail( function(jqXHR, textStatus, errorThrown) {
    alert(textStatus);
});

如果您更改该URL,调用fail()应该会弹出错误消息。

我正在使用Sinatra作为后端,我非常确定我的JSON是有效的。此外,我在我的另一段JS代码的后端上有完全相似的代码,那个也能正常工作。 - Avdept
1
如果您使用像Chrome这样的浏览器,请打开开发者工具(F12),并在代码进行AJAX请求时观察网络选项卡。如果您单击请求,Chrome将显示一系列选项卡(标题/预览/响应/ Cookie /计时)。如果您查看响应选项卡的内容,那么您是否拥有有效的JSON响应应该是非常清楚的。如果您使用FF,则Firebug具有类似的Net选项卡,我假设IE也有一些等效的选项或使用Fiddler。 - Barrie

0

确保在您的服务器端脚本中添加任何调试输出代码。

此外,使用Firebug或Chrome工具,您可以轻松检查服务器响应,看它是否是有效的JSON格式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接