0

テキストエリアに入力された情報をAjaxを使用して送信し、送信された文字列をページに読み込ませようとしています。エラーを取り除き、成功関数を表示していますが、結果がページに読み込まれていません。何が間違っているのですか?

            var dataString = tinyMCE.get('addAnswer').getContent();

            $.ajax({
                type: "POST",
                url: "/home/19/1/add_answer/",
                data: $(dataString).serialize(),
                success: function(data){
                    alert(dataString);
                },
                error: function(){
                    alert('You fail');
                }
            });

完全なコードは次のとおりです。

$('#submitAnswer').on('click', function(e){
            e.preventDefault();
            var dataString = tinyMCE.get('addAnswer').getContent();


        // Next 3 functions are all for the csrf token
            function getCookie(name) {
                var cookieValue = null;
                if (document.cookie && document.cookie != '') {
                    var cookies = document.cookie.split(';');
                    for (var i = 0; i < cookies.length; i++) {
                        var cookie = jQuery.trim(cookies[i]);
                        // Does this cookie string begin with the name we want?
                        if (cookie.substring(0, name.length + 1) == (name + '=')) {
                            cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                            break;
                        }
                    }
                }
                return cookieValue;
            }
            var csrftoken = getCookie('csrftoken');

            function csrfSafeMethod(method) {
                // these HTTP methods do not require CSRF protection
                return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
            }
            function sameOrigin(url) {
                // test that a given url is a same-origin URL
                // url could be relative or scheme relative or absolute
                var host = document.location.host; // host + port
                var protocol = document.location.protocol;
                var sr_origin = '//' + host;
                var origin = protocol + sr_origin;
                // Allow absolute or scheme relative URLs to same origin
                return (url == origin || url.slice(0, origin.length + 1) == origin + '/') ||
                    (url == sr_origin || url.slice(0, sr_origin.length + 1) == sr_origin + '/') ||
                    // or any other URL that isn't scheme relative or absolute i.e relative.
                    !(/^(\/\/|http:|https:).*/.test(url));
            }
            $.ajaxSetup({
                beforeSend: function(xhr, settings) {
                    if (!csrfSafeMethod(settings.type) && sameOrigin(settings.url)) {
                        // Send the token to same-origin, relative URLs only.
                        // Send the token only if the method warrants CSRF protection
                        // Using the CSRFToken value acquired earlier
                        xhr.setRequestHeader("X-CSRFToken", csrftoken);
                    }
                }
            });

            // End of csrf token functions

            $.ajax({
                type: "POST",
                url: "/home/19/1/add_answer/",
                data: $(dataString).serialize(),
                success: function(data){
                    alert(dataString);
                },
                error: function(){
                    alert('damn');
                }
            });
        });
4

2 に答える 2

2

以下に示すように、ページ内の任意の html 要素を選択して、success 関数内で受信したデータをロードします。

$.ajax({
   type: "POST",
   url: "/home/19/1/add_answer/",
   data: $(dataString).serialize(),
   success: function(data){
             alert(dataString);
             $("#test").html(data); // replace 'test' with your selected element id
            },
   error: function(){
              alert('You fail');
            }
 });
于 2013-01-31T05:52:57.053 に答える
0

$.serializeのドキュメントによると、dataString はフォーム オブジェクトである必要があります。あなたの場合のdataStringは生の文字列のようです。$.ajaxでは、dataurlencoded リクエスト パラメータ、または (jquery によって) urlencoded リクエスト パラメータに変換されるオブジェクトのいずれかです。コードは次のようになります。

var dataString = tinyMCE.get('addAnswer').getContent();
$.ajax({
    type: 'POST',
    url: '/home/19/1/add_answer/',
    data: {textData: dataString},
    success: function(data){
                alert(dataString);
            },
    error: function(){
                alert('You fail');
            }
});

サーバー側では、データはキー "textData" を持つ POST パラメーターとして送信されます。

また、次のように$.postを使用する方が短く/簡単になる場合があります。

var dataString = tinyMCE.get('addAnswer').getContent();
$.post('/home/19/1/add_answer/', textData: dataString, function(data) {
    alert(dataString);
    // or do something with the response from the server (data)
});
于 2013-01-31T05:55:36.647 に答える