2013-06-19 39 views
5

Tôi đã tìm kiếm trên google và có rất nhiều câu hỏi về chủ đề này trên stackoverflow. Chẳng hạn như 'dữ liệu không được gửi trên phương thức đăng bài', v.v. Nhưng dường như không phải là câu hỏi của tôiajax php javascript: lỗi khi sử dụng phương thức POST

Trường hợp gần như giống với các câu hỏi khác. Đây là những msg lỗi:

Firefox (v21):

InvalidStateError: An attempt was made to use an object that is not, or is no longer, usable. 
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); 

Chrome (v27):

Uncaught Error: InvalidStateError: DOM Exception 11 

Khi yêu cầu được gửi bởi GET, không có lỗi. Và tất cả dữ liệu GET nhận được tốt.

Nhưng khi được gửi bởi POST + setRequestHeader, itu xảy ra lỗi như trên. Khi setRequestHeader bị xóa, lỗi đã biến mất. Không có lỗi, nhưng không nhận được dữ liệu POST. i print_r($_POST); sau đó mảng trống rỗng

Câu hỏi đã được cập nhật. Dưới đây là những người gọi:

goServer({ 
    url  : 'users/sign-in.php', 
    method : 'POST', 
    data : 'randomId=' + randomId + '&name=' + name + '&password=' + password, 
    done : function(response) { 
     alert(response); 
    }, 
    fail : function(response) { 
     alert(response); 
    } 
}); 

Và đây là các chức năng (xin lỗi, dây chuyền dài):

function randomString() { 
    var str = new Date().getTime(), 
    str2 = Math.random(); 

    str  = str.toString(); 
    str2 = str2.toString(); 
    str2 = str2.substring(2,7); 
    str  += str2; 

    return str; 
} 



function goServer(opts) { 
    var xhr = new XMLHttpRequest(); 
    xhr.onreadystatechange = requestComplete; 

    function requestComplete() { 
     if (xhr.readyState === 4) { 
      if (xhr.status === 200) { 
       opts.done(xhr.responseText); 
      } else { 
       opts.fail(xhr.responseText); 
      } 
     } 
    } 

    if (!opts.method || opts.method === undefined) { 
     opts.method = "GET"; 
    } 

    if (!opts.cache || opts.cache === undefined) { 
     opts.cache = false; 
    } 

    if (opts.cache === false) { 
     opts.url += '?nocache=' + randomString(); 
    } else { 
     opts.url += '?nocache=false'; 
    } 

    if (opts.method === "GET") { 
     if (opts.data !== '' && opts.data !== undefined) { 
      opts.url += '&' + opts.data; 
     } 
     opts.data = ''; 
    } else { 
     xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); 
    } 

    xhr.open(opts.method, opts.url, true); 
    xhr.send(opts.data); 

} 

Lưu ý, các tham số dữ liệu (opts.data) được thiết lập để url khi nó gửi qua đường ĐƯỢC. Khi được gửi bởi POST, paramater được đặt thành xhr.send (opts.data);

Câu hỏi: Cách nhận dữ liệu POST chính xác?

Cảm ơn bạn

+1

đăng mã quá, vui lòng – DevZer0

+1

'print_r (file_get_contents ('php: // input'));' BlitZ

+0

@CORRUPT, câu hỏi được cập nhật :) –

Trả lời

12

Gọi xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); sau khi bạn gọi xhr.open

Cũng opts.data phải là một chuỗi chứa cặp khóa/giá trị. ví dụ. key=value&method=post

+0

Whoaaa, ​​bạn là đúng Sir! Bạn đúng, vâng, vấn đề đã được giải quyết. Cảm ơn bạn rất nhiều –

+0

Như bạn đã nói, hãy gọi 'setRequestHeader (' Content-type ',' application/x-www-form-urlencoded ') 'sau' xhr.open' và nó hoạt động! Một lần nữa, cảm ơn bạn rất nhiều, thưa bạn! –

Các vấn đề liên quan