2013-03-01 4 views
0

Я пытаюсь запустить вызов JQuery/Ajax, который работает в IE9, Chrome, FF, Opera Однако она не в IE8 и UE7IndexOf не работает в IE 8/7

Код:

$.ajax({url:plink, 
     success: function(result) { 
     ppriser = result.split("**")[1]; 
     plabels = result.split("**")[2]; 
     pgrupper = result.split("**")[3]; 
     priser = ppriser.split("!#"); 
     labels = plabels.split("!#"); 
     grupper = pgrupper.split("!#"); 
     $("td .pricetag").each(function() { 
      var slutpris = "999999"; 
      var slutlabel = ""; 
      for(i=1;i<priser.length;i++) { 
      str = String($(this).attr('group')); 
      grp = String(grupper[i]); 
      pos = grp.indexOf(str); 
      if(grp==str || pos>=0) { 
       j=parseInt(priser[i]); 
       k=parseInt(slutpris); 
       if(j!=0 && j<k) { 
       slutpris = priser[i]; 
       slutlabel = labels[i]; 
       } 
       if(slutlabel=="") { slutlabel = "fra:"; } 
       if(slutpris!="999999") { 
       $(this).html(slutpris); 
       $(this).prev('td').html(slutlabel); 
       } 
       if(slutpris=="999999") { 
       $(this).css('display','none'); 
       $(this).closest('.pris').css('display','none'); 
       } 
      } 
      } 
     }); 
     }}); 

Я пробовал различные комбо: кэша: ложь, типа: "POST", типа: "GET", данные: "HTML", DATATYPE: "HTML", тайм-аут: 10000,

Пример Plink ссылка:

Default.aspx?ID=148&fb=true&mode=-1&[email protected]@SHOP5,[email protected]@SHOP5, 

Ссылка JQuery:

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> 

Аякса ссылка скрипт помещается в конце страницы.

+0

Возможно, URL не правильно закодирован ... '@' должен быть закодирован до '% 40'. – Christoph

+1

У вас возникли ошибки в консоли на IE7/8? –

+0

Что такое тип содержимого для ответа URL «Default.aspx? ID = 148 & fb = true & mode = -1 & groupid = 1210405 @@ SHOP5,1210103 @@ SHOP5,"? Если это приложение/json, то IE8/7 не будет работать должным образом. Он должен быть текстовым/равным. –

ответ

1

Я попытался наложить строку в несколько wasy (так как IE 8/7 не нравится indexOf для объектов массива), но безрезультатно. После этого я нашел это решение.

if (!Array.prototype.indexOf) { 
    Array.prototype.indexOf = function(obj, start) { 
     for (var i = (start || 0), j = this.length; i < j; i++) { 
     if (this[i] === obj) { return i; } 
     } 
     return -1; 
    } 
    } 

Я проверяю, поддерживается ли indexOf - и если функция не создана.

+0

hm, я думал, 'grp' будет строкой, а не массивом ... В IE9 добавлена ​​поддержка Array.prototype.indexOf'. – Christoph

+0

grp должен быть строкой ... но я попробовал как String (var), так и var.toString, но не повезло. Реализация вышеописанного ... –

+0

Оба параметра 'String (var)' и 'var.toString' должны дать вам строковое представление массива. Я понятия не имею, что вы там делали неправильно ... – Christoph