2013-08-08 21 views
5

tôi có mã nàyjQuery bài lợi nhuận không có dữ liệu đáp ứng

$(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; 

}); 

});

Máy chủ của tôi trả về hàm băm với khóa flag. Tuy nhiên, mã này trả về cho tôi không có dữ liệu để điều khiển hoặc cảnh báo, trong khi yêu cầu bài đăng thành công. Tôi đang làm gì sai?

Trả lời

3

tôi sẽ đồng ý với Hemant_Negi rằng đây là một vấn đề với bạn máy chủ không trở về JSON hợp lệ. Các mã sau dựa trên của bạn hoạt động tốt (thay đổi URL trong đó quá mà trả về JSON hợp lệ):

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); 
}); 

Nếu bạn thay đổi URL đó, cuộc gọi đến thất bại() sẽ cảnh báo một thông báo lỗi.

+0

im sử dụng sinatra làm phụ trợ và tôi khá chắc chắn rằng tôi có json hợp lệ ở đó. Sau đó tôi có mã hoàn toàn tương tự trên phần phụ trợ của tôi cho một đoạn mã js khác và hoạt động tốt – Avdept

+0

Nếu bạn sử dụng một trình duyệt như Chrome, hãy mở công cụ nhà phát triển (F12) và xem tab Mạng khi mã của bạn tạo yêu cầu AJAX. Nếu bạn nhấp vào yêu cầu, Chrome sẽ hiển thị một loạt các tab (Tiêu đề/Xem trước/Trả lời/Cookie/Thời gian). Nếu bạn nhìn vào nội dung của tab phản hồi, nó sẽ khá rõ ràng nếu bạn có phản hồi JSON hợp lệ hay không. Firebug có một tab Net tương tự nếu bạn sử dụng FF và tôi giả sử IE có một số tương đương hoặc sử dụng Fiddler. – Barrie

3

Nó xảy ra khi bạn máy chủ không được trả lại một JSON hợp lệ

thử nó mà không datatype đầu tiên như dưới đây ..

$.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); 
      } 

     }); 
0

Đảm bảo rằng bạn lấy bất kỳ mã đầu ra gỡ lỗi nào trong tập lệnh phía máy chủ của mình.

Ngoài ra, bằng cách sử dụng công cụ Firebug hoặc chrome, bạn có thể dễ dàng kiểm tra phản hồi từ máy chủ để xem liệu nó có ở định dạng JSON hợp lệ hay không.