0

我正在使用 Ajax 提交输入到 textarea 中的信息,并试图让页面加载提交的字符串。我摆脱了错误并获得了成功功能来显示,但结果没有加载到页面上。我究竟做错了什么?

            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 元素以加载成功函数内部接收到的数据,如下所示。

$.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中,data要么是 urlencoded 请求参数,要么是(通过 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 回答