10

任意のアンカーに対して Ajax リクエストを行う関数があります。リクエスト メソッドは GET または POST です。この場合、フォームを使用せずに POST を作成したいのですが、Ajax リクエストはリクエストを送信する前にエラーをスローします。エラーの値は "error" で、すべてのエラー/障害の説明変数は "" です。

 function loadPage(url,elem_id,method,data) {
    ajaxLoading(elem_id);
    $.ajax({
        type: method,
        url: url,
        data: data,
        success:function(data){
            $("#"+elem_id).html(data);;
        },
        error:function(request,textStatus,error){
            alert(error);
        }
    });
 }

関数が呼び出されたときのパラメーターは次のとおりです (js コンソールからコピーされます)。

data: "partial=yes"
elem_id: "page"
method: "post"
url: "/projects/2/follow"

お尋ねのとおり、loadPage 関数を呼び出すコードは次のとおりです。

$("body").on("click","a.ajax",function(event) {
    var _elem = getDataElem($(this));
    var _method = getRequestMethod($(this));
    var _partial = getRequestPartial($(this));
    handlers.do_request(event,$(this).attr("href"),_elem, _method, _partial);
});

var handlers = (function() {
    var obj = {};
    obj.do_request = function(event,url,elem_id,method,data) {
        event.preventDefault();

        loadPage(url,elem_id,method,data);
        history.pushState({selector:elem_id,method:method,data:data},null,url);
    };
}());

Ajax リクエストが失敗した後、デフォルトでリクエストが行われ、成功を返します。私が読んだ限りでは、これは POST リクエスト (フォームを必要としない) を作成する有効な方法のようです。

関数で何か間違ったことをしていますか?エラー情報が空なのはなぜですか?

ありがとう

編集:

私は、変数「データ」がシリアル化関数で作成されたときに、その関数が機能する「フォーム」からの POST について考えてきました (たとえば、「var data = $(this).serialize();」)。「フォーム」なしで POST を作成したときの「データ」の形式が何らかの形で間違っている可能性がありますか? おそらく、JQuery Ajax 関数は、POST が行われたときに、"partial=yes" のような単純な文字列をデータとして受け入れません。これについて何か考えはありますか?

4

4 に答える 4

2

私はこの問題を経験したばかりで、1、2 時間後にキャッシュを false に設定しようと考えました。それは私のためにそれを修正しました。

$.ajax({
    url: url,
    cache: false,
    type: method
});

残念ながら、キャッシュを再度削除したところ、問題がなかったかのようにリクエストが機能していました。まるで設定cache:falseが何かを「クリック」したようです。

しかたがない。

于 2013-11-19T22:05:43.073 に答える
0

推測ですが、ドキュメント'POST'では type パラメータはすべて大文字'post'です。

于 2013-04-24T03:36:45.490 に答える
0

試す:

function loadPage(url,elem_id,method,dat) {
    ajaxLoading(elem_id);
    $.ajax({
        type: method,
        url: url,
        data: dat,
        success:function(data){
            $("#"+elem_id).html(data);;
        },
        error:function(request,textStatus,error){
            alert(error);
        }
    });
 }

キーワードにちなんで名付けられた変数を使用して問題が発生していないかどうか疑問に思っています。これが機能しない場合は、引数を指定せずに loadPage を呼び出し、すべての ajax パラメーターをハードコーディングして、機能するかどうかを確認してください。

于 2013-04-24T16:43:41.000 に答える
0

問題を解決できなかったし、それが起こっている理由を見つけることもできませんでした。ただし、メソッド「POST」でアンカーの代わりに非表示の空のフォームを使用することで、回避策を見つけました。フォームの場合、関数はうまく機能しました。

答えてくれてありがとう

于 2013-04-28T18:03:48.273 に答える