«Вызов GET в случае успеха POST ajax», работающий с Firefox, но не с Safari - PullRequest
0 голосов
/ 24 февраля 2012
var addRecord, getRecords, wcfServiceUrl;

// Use strict for all other functions
// Based on post at:
// http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/

(function () {
    "use strict";

    wcfServiceUrl = "http://localhost/WcfRestUpdates/eval/evals";

    // Execute when the DOM is fully loaded
    $(document).ready(function () {
        getRecords();
    });

     // Add record
    $(function () {
        $("#butCallAjax").click(addRecord);                

    });     

    //Add record function start
    addRecord = function () {
        //jQuery.support.cors = true;
        $.ajax({
                    type: "POST",
                    url: wcfServiceUrl,                    
                    //data: '<Eval xmlns="http://schemas.datacontract.org/2004/07/WcfRestUpdates"><Comments>' + document.getElementById("txtComment").value + '</Comments><Submitter>' + document.getElementById("txtSubmitter").value + '</Submitter></Eval>',
                    data: '<Eval xmlns="http://schemas.datacontract.org/2004/07/WcfRestUpdates"><Comments>' + document.getElementById("txtComment").value.toString() + '</Comments><Submitter>' + document.getElementById("txtSubmitter").value.toString() + '</Submitter></Eval>',
                    //data: jQuery.parseJSON('{"Comments":"This is test comment","Id":"1","Submitter":"Mayank","Timesent":"\/Date(928129800000+0530)\/"}'),
                    //ContentType:"application/json; charset=utf-8",
                    //dataType: "json",   
                    contentType: "application/xml",                   
                    dataType: "xml",   
                    success: getRecords,
                    error: function (xhr) {
                        if(xhr.status = 200) {
                            getRecords;
                        }
                        else{
                            alert("Error in POST:" + xhr.status.toString() + "and "+ xhr.responseText);                        
                            //var obj = jQuery.parseJSON('{"Comments":"This is test comment","Id":"1","Submitter":"Mayank","Timesent":"\/Date(928129800000+0530)\/"}');
                            //alert("Error in POST:");  
                            //alert("Error in POST:" + obj.Id);                        
                        }
                    }
                });        
    };

    //Add record function end

    //Get records function start
    getRecords = function() {
        jQuery.support.cors = true;
        $.ajax({
            type: "GET",
            url: wcfServiceUrl,
            data: "{}",            
            ContentType:"application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {

                //alert('success');
                //var resultText = "<div>";
                var divR = document.getElementById("divResult");
                //[{ "Comments": "this is my first comment", "Id": "1", "Submitter": "Mayank", "Timesent": "\/Date(1329473557750+0530)\/" }, { "Comments": "this is my first comment", "Id": "2", "Submitter": "Mayank", "Timesent": "\/Date(1329473813781+0530)\/"}]
                divR.innerHTML = '<div style="clear:both;width:7%;float:left;padding:5px;" class="sb">' + 'Id' + '</div>';
                divR.innerHTML += '<div style="width:15%;float:left;padding:5px;" class="sb">' + 'Submitter' + '</div>';
                divR.innerHTML += '<div style="width:40%;float:left;padding:5px;" class="sb">' + 'Comments' + '</div>';
                divR.innerHTML += '<div style="width:20%;float:left;padding:5px;" class="sb">' + 'Date/Time' + '</div>';
                $.each(data, function (i, theItem) {

                    //var option = document.createElement("option");
                    //option.text = theItem.toString();
                    //option.value = theItem.toString();

                    try {
                        //alert('success add combo');
                        //combo.add(option, null); // Other browsers
                        var datetime = new Date(theItem.Timesent.match(/\d+/)[0] * 1);
                        divR.innerHTML += '<div style="clear:both;width:7%;float:left;padding:5px;" >' + theItem.Id.toString() + '</div>';
                        divR.innerHTML += '<div style="width:15%;float:left;padding:5px;" >' + theItem.Submitter.toString() + '</div>';
                        divR.innerHTML += '<div style="width:50%;float:left;padding:5px;" >' + theItem.Comments.toString() + '</div>';
                        divR.innerHTML += '<div style="width:20%;float:left;padding:5px;" >' + datetime.toDateString() + '</div>';
                    }
                    catch (error) {
                        alert('error found');
                        combo.add(option); // really old browser
                    }

                });
            },
            error: function (xhr) {
                        alert("Error in GET:" + xhr.responseText);
            }               
        });
    };
    //Get records function end
}) ();

Мне нужно отобразить результат для div после успешного подтверждения POST. Он отлично работает с FireFox. но с Safari мне нужно обновить браузер, чтобы получить отправленные данные. Функция "getRecords" используется для отображения данных в div. который прекрасно работает во всех браузерах при загрузке страницы. но он не работает как часть ajax POST> успешно.

1 Ответ

1 голос
/ 28 февраля 2012
$.ajax({
                type: "POST",
                url: wcfServiceUrl,
                //data: '<Eval xmlns="http://schemas.datacontract.org/2004/07/WcfRestUpdates"><Comments>' + document.getElementById("txtComment").value + '</Comments><Submitter>' + document.getElementById("txtSubmitter").value + '</Submitter></Eval>',
                data: '<Eval xmlns="http://schemas.datacontract.org/2004/07/WcfRestUpdates"><Comments>' + document.getElementById("comment").value + '</Comments><Submitter>' + document.getElementById("submitter").value + '</Submitter></Eval>',
                contentType: "text/xml",
                dataType: "xml",
                success: function (xhr) { getRecords(); },
                error: function (xhr) {
                            if(xhr.status = 200) {                            
                                getRecords();
                            }
                            else{
                                alert("Error while adding record with error-code:" + xhr.status.toString() + "and "+ xhr.responseText);                                                   
                            }
                        }

            });

Неправильный вызов функции "getRecord" в ajax "POST" success. Использовал "function (xhr) {getRecords ();}" вместо "getRecord", и это работает !!

...