2015-08-02 4 views
0

У меня есть этот код javascript, который выполняет запрос ajax при нажатии кнопки.ошибка с split: split не является функцией

$('#allinea').click(function(e){ 
    e.preventDefault(); 
    var password = $('#password').val(); 
    $.ajax({ 
     type: "POST", 
     url: "db_align.php", 
     data: {password:password}, 
     complete: function(data){ 
      data1=data.split("|"); 
      if(data1[0]=="Successo"){ 
       $("#per_all").fadeTo(200,0.1, 
       function(){ 
        $(this).find('img').attr("src",'../images/ok.png'); 
        $(this).find('.right').html(data1[1]).promise().done(function(){ 
         $(this).fadeTo(900,1); 
        }); 
       }); 
      }else if(data1[0]=="Errore"){ 
       $("#per_all").fadeTo(200,0.1, 
       function(){ 
        $(this).find('img').attr("src",'../images/alert.png'); 
        $(this).find('.right').html(data1[1]).promise().done(function(){ 
         $(this).fadeTo(900,1); 
        }); 
       }); 
      } 
     } 
    }); //chiudo $.ajax 
}); 

страница возвращается PHP «Successo | Allineamento riuscito», и я вижу его правильно поджигатель но JS возвращает ошибку:

Type error: data.split is not a function

data1=data.split("|");

Я использую этот код везде в мое приложение без каких-либо неудобных. Что я делаю неправильно на этот раз?

Для чего я вижу btw, это не массив, поэтому это должно работать без каких-либо неудобств!

+0

Если вы хотите JQuery вернуть JSON все время силы его с помощью 'DATATYPE: json', для обычного текста' DATATYPE: Text' – Mouser

ответ

2

Ответ Exo является совершенным. Это позволит вам редактировать исходный текст.

Если вы знаете тип возвращаемого данных, вы можете (необходимо) установить его явно. Затем jQuery программно преобразует data для вас в правильном формате.

dataType: json для JSON,
dataType: text для обычного текста

Больше можно найти в documentation.

You should update your complete method to done for success condition and fail for when the request fails.

complete is deprecated as of version 1.8, it's replaced with always , which returns a data or jqXHR object. When success complete will return a data object according to the functionality of done .

+0

Понял, но мое сомнение остается. Я копирую этот код с одного из многих вызовов Ajax, которые я создал в своем приложении. Я всегда возвращаю исходный текст из php, и js работает правильно. Я посмотрю на вопрос о завершении. Угадайте, у меня будет небольшая работа по обновлению моего кода :) –

+0

Обычно jQuery угадывает тип данных и возвращает объект, который, по его мнению, является. Наверное, здесь нет подсказки. – Mouser

+0

выяснил, в чем причина этой неудачи. Если входные данные являются текстом (обычно я сериализую форму данных), jQuery будет считать, что выходные данные также являются текстовыми (как обычно, putput). На этот раз я вводим json-массив и выводя некоторый текст. Еще раз спасибо за подсказку –

5

jQuery вернет здесь jqXHR, а это значит, что вместо прямого доступа к data вам, вероятно, понадобится data.responseText.

+0

В 99 из 100 случаев данные нормально. Это единственный случай, когда он не работает. Посмотрите на свой ответ в любом случае! –

Смежные вопросы