0

在我的应用程序中,我通过 jquery ajax 将网页的 html 发送回服务器(因为我需要在服务器中存储此页面的副本)。代码是这样的

$(document).ready(function () {
    var pcontent = document.body.innerHTML;
     var url = new URI().addQuery("pcontent", pcontent);

    $.ajax({
        url: url, 
        type: "GET", 
        success: function (data) {
            alert(data.html());
        },
        complete: function () {
            alert(1);
        },
        error: function(jqXHR, error, errorThrown) {  
            if (jqXHR.status) {
                alert(jqXHR.responseText); 
            }
            else {
                alert("Something went wrong");
            }
        }
    });
    return false;
});

但这会引发错误:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<HTML>
    <HEAD>
        <TITLE>Request URL Too Long</TITLE>
        <META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii">
    </HEAD>
    <BODY>
        <h2>Request URL Too Long</h2>
        <hr>
        <p>HTTP Error 414. The request URL is too long.</p>
    </BODY>    
</HTML>

有什么办法可以做到这一点?

编辑:从我从这里得到的输入我已经改变了我的代码(改变 get to post)

  $(document).ready(function () {

    var pcontent = document.body.innerHTML;

    var url = new URI().addQuery("pcontent", pcontent);

    $.ajax({
        url: url, type: "POST"
      , success: function (data) {

          alert(data.html());
      },
        complete: function () {
            alert(1);
        },
        error: function (jqXHR, error, errorThrown) {
            if (jqXHR.status) {
                alert(jqXHR.responseText);
            } else {
                alert("Something went wrong");
            }
        }
    });
    return false;
});

但仍然存在相同的错误

4

5 回答 5

6

您应该使用发布请求而不是获取请求。

var pcontent = document.body.innerHTML;
var url = new URI();

$.ajax({
    url: url,
    type: "POST",
    data: {"pcontent": pcontent},
    success: function (data) {
            alert(data.html());
    },
    complete: function () {
        alert(1);
    },
    error: function(jqXHR,error, errorThrown) {  
        if(jqXHR.status){
            alert(jqXHR.responseText); 
        }else{
            alert("Something went wrong");
        }
    }
});
return false;
于 2013-01-28T12:32:13.507 回答
1

那是因为 GET 变量只支持有限的数据量,使用 type: POST 而不是 type GET

$.ajax({
 url: url, type: "POST"
    , success: function (data) {

        alert(data.html());
    },
 complete: function () {
    alert(1);
 },
 error: function(jqXHR,error, errorThrown) {  
 if(jqXHR.status){
    alert(jqXHR.responseText); 
 }else{
    alert("Something went wrong");
 }
 }
});//indentation
于 2013-01-28T12:23:02.293 回答
1

使用 HTTP POST 请求。

$.ajax({
    url: url,
    type: "POST"
    // ...
});
于 2013-01-28T12:23:05.897 回答
1

使用POST请求。GET在 IE 中限制为 2048 个字符,在大多数其他中限制为 65,538 个字符。

于 2013-01-28T12:23:53.417 回答
1

GET 方法发送 URL 中的所有数据。

请改用 POST 方法。

于 2013-01-28T12:23:55.620 回答