почему этот javascript работает только в IE Explorer

#javascript #jquery #ajax

#javascript #jquery #ajax

Вопрос:

привет, я не знаю, почему этот скрипт работает только в internet Explorer, именно в методе, который возвращается из вызываемого ajax. взгляните на скрипт

 function saveMap() {

if (confirm("Esta seguro de guardar el mapa?")) {
//        alert("Estas en el centro:"   map.getCenter().toString()   "Con zoom: "   map.getZoom().toString());
    var mapData = new Array(map.getCenter().lat().toString(),
                            map.getCenter().lng().toString(),
                            "Esto es una prueba",
                            map.getZoom().toString());
    $.ajax({
        type: "POST",
        url: "SaveMap.aspx/saveMapData",
        data: "{mapData: '"   mapData   "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (flag) {

            //this block of code only works in IE
            if (flag)
                alert("Se guardo el mapa de manera correcta");
            else
                alert("Ocurrio un error en la ejecucion"); 
        }
    });    
}
}
  

это подпись моего метода в aspx.net

 [WebMethod()]
public static bool saveMapData(string mapData) 
{ 
    //do something
    return true;
}
  

Комментарии:

1. Что происходит, когда код не работает? Было бы полезно получить более подробную информацию о проблеме.

2. Какие браузеры вы пробовали, кроме IE? В какой версии IE это работает? Какую ошибку вы получили в других браузерах, которые не работали?

3. @Andy когда я отлаживаю код, я вижу, что он работает. но только когда я отлаживаю скрипт в браузере. но не эксплуатируйте или что-то в этом роде

4. @Matt я пробовал в Firefox 4, Chrome и IE 8

5. Как выглядит сигнатура метода вашего веб-метода (т. Е. Какие параметры он принимает и какие они типы)? Я полагаю, что проблема, с которой вы столкнулись, связана с тем, как вы передаете этот массив.

Ответ №1:

У меня есть одна идея, почему скрипт работает в IE, но не в других браузерах. Сначала посмотрите здесь (также здесь), и вы обнаружите, что json, возвращенный от вас ASP.NET Веб-метод начинается с d:

 {"d":"something_json"}
  

Итак, на вашем месте я бы сделал что-то подобное:

 success: function (flag) {

            //this block of code only works in IE
            if (flag.d)
                alert("Se guardo el mapa de manera correcta");
            else
                alert("Ocurrio un error en la ejecucion"); 
        }
  

Я могу подумать, что это потому, что IE является программным обеспечением Microsoft и может читать json {"d":"something_json"} лучше, чем другие браузеры.

Комментарии:

1. @Jorge Переходит ли WebMethod внутрь SaveMap.aspx/saveMapData тела метода при отладке с помощью точки останова?

2. @Jorge Во-вторых, пожалуйста, укажите подпись вашего веб-метода или даже исходный код. Приветствия!

3. @r.piesnikowski да, метод asp работает, а метод mi — это метод, который я изложу в своем вопросе, дайте мне одну секунду, чтобы изменить содержимое

4. @Jorge Вы изменили свой код или он работал сам по себе? 🙂