safari-jquery-ajax 500 Erreur de serveur interne

j'ai créé un appel ajax jquery et il fonctionne très bien dans Chrome, firefox et IE.

où comme dans Safari, il donne 500 erreurs de serveur interne dans la réponse. Je pensais que ça pourrait être dû à une exception du serveur. Mais quand j'ai essayé de débogage, j'ai trouvé qu'il n'est pas de frapper le serveur.

Le truc bizarre ici, c'est que l'appel ajax fonctionne pour tous les appels alternatifs. L'appel-1 échoue, puis l'appel 2 réussir.enter image description hereenter image description here

je joins la capture d'écran de la demande et de la réponse(à la fois le succès et erreur). Merci de m'aider à résoudre ce problème.

Merci à l'avance, Raghav

var coId = globalObject.GetCompanyIdFromUrl();
if ($("#headerCompanyMenu").length > 0 && coId != "") {
    var strData = "{"coId":"" + coId + ""}";
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        cache: false,
        url: globalObject.rootPath + "search/webmethod.aspx/GetCoHeaderData",
        data: strData,
        async: true,
        success: function (d) {
            var coHeaderData = JSON.parse(d);
            $("#lblCoNm").html(coHeaderData.lblCoNm);
            $("#lbl_prim_im").html(coHeaderData.lbl_prim_im);
            $("#lbl_prim_md").html(coHeaderData.lbl_prim_md);
            $("#lbl_prd_own").html(coHeaderData.lbl_prd_own);
            $("#lbl_geo_own").html(coHeaderData.lbl_geo_own);
            $("#lbl_org_inv").html(coHeaderData.lbl_org_inv);
            $("#lbl_out_inv").html(coHeaderData.lbl_out_inv);
            $("#lbl_cur_val").html(coHeaderData.lbl_cur_val);
            $("#lbl_nbv").html(coHeaderData.lbl_nbv);
            $("#lbl_fv").html(coHeaderData.lbl_fv);
            $("#lblProc").html(coHeaderData.lblProc);
            $("#lblFinGrd").html(coHeaderData.lblFinGrd);

            if (coHeaderData.addNewDeal == "true")
                $("#lnkAddNewDeal").show();
            if (coHeaderData.coDeals.length > 0) {
                BindData("coDealsTmpl", coHeaderData.coDeals);
                $("#coDeals").show();
            }
        },
        error: function (error) {
            //alert("Company search error");

        }

    });
<!-Je dirige le safari depuis Win7. Le safari du Mac le charge parfaitement. Aucune erreur pour l'appel ajax.

le serveur est windows 2008, exécutant iis 7. Pas de serveurs équilibrants. Chaque fois que l'appel ajax touche le même serveur méthode, avec les mêmes données d'entrée et attend les mêmes données de sortie.

8
demandé sur Raghav 2012-02-02 09:49:33

3 réponses

je dirais que la raison pour laquelle l'appel échoue est à cause d'un bug dans Safari quand on travaille avec L'authentification Windows sous IIS. Aller les paramètres d'Authentification de votre site web. Clic droit sur L'authentification Windows, Choisir les fournisseurs et supprimer négocier, laissant NTLM qui fonctionne très bien. Je n'ai pas testé Kerberos.

cette question n'apparaît que dans certaines constructions de safari.

2
répondu Aran Mulholland 2012-04-26 06:59:19

en plus des commentaires de CCCason, je dirais explicitement à l'appel ajax que son type de données est json en ajoutant:

dataType: "json"

peut-être safari devine le mauvais type de données?

2
répondu ryanulit 2012-02-07 18:33:10

le Premier: je vérifierais pour être sûr que $("#headerCompanyMenu").Longueur > 0 & & coId != "" renvoie true si vous pensez qu'il devrait être.

Deuxième: je voudrais assurez-vous que vous avez un " / " à la fin de globalObject.rootPath lorsque vous utilisez Safari.

Troisième: je voudrais changer votre ajax post pour ressembler à ceci:

var coId = globalObject.GetCompanyIdFromUrl();
if ($("#headerCompanyMenu").length > 0 && coId != "") {
    var strData = {'coId' : coId};
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        cache: false,
        url: globalObject.rootPath + "search/webmethod.aspx/GetCoHeaderData/",
        data: strData,
        dataType: "json",
        async: true,
        success: function (d) {
            var coHeaderData = JSON.parse(d);
            $("#lblCoNm").html(coHeaderData.lblCoNm);
            $("#lbl_prim_im").html(coHeaderData.lbl_prim_im);
            $("#lbl_prim_md").html(coHeaderData.lbl_prim_md);
            $("#lbl_prd_own").html(coHeaderData.lbl_prd_own);
            $("#lbl_geo_own").html(coHeaderData.lbl_geo_own);
            $("#lbl_org_inv").html(coHeaderData.lbl_org_inv);
            $("#lbl_out_inv").html(coHeaderData.lbl_out_inv);
            $("#lbl_cur_val").html(coHeaderData.lbl_cur_val);
            $("#lbl_nbv").html(coHeaderData.lbl_nbv);
            $("#lbl_fv").html(coHeaderData.lbl_fv);
            $("#lblProc").html(coHeaderData.lblProc);
            $("#lblFinGrd").html(coHeaderData.lblFinGrd);

            if (coHeaderData.addNewDeal == "true")
                $("#lnkAddNewDeal").show();
            if (coHeaderData.coDeals.length > 0) {
                BindData("coDealsTmpl", coHeaderData.coDeals);
                $("#coDeals").show();
            }
        },
        error: function (error) {
            //alert("Company search error");

        }

    });
2
répondu Jason 2012-02-07 19:01:54