2015-01-12 3 views
0

У меня есть вызов AJAX:AJAX responseText missmatch

var ajax = new XMLHttpRequest(); 
ajax.open("POST", "testing.php", true); 
ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
ajax.onreadystatechange = function(){ 
    if(ajax.readyState == 4 && ajax.status == 200){ 
     var returnVal = ajax.responseText; 

     if(returnVal == "success"){ 
      // Redirect 
     }else{ 
      // Inform of failure 
     } 
    } 
} 
ajax.send("testing=1"); 

, что пары со следующими PHP:

if(isset($_POST["testing"])){ 
    $formScore = checkForm($db_conx); 
    if($formScore == 10){ 
     echo "success"; 
     exit(); 
    }else{ 
     echo "fail"; 
     exit(); 
    } 
} 

И это прекрасно работает. Счет формы составляет «10», когда это должно быть, и значение, отправленное обратно на вызов AJAX, фактически является «успехом». По крайней мере, если я распечатать текст ответа:

$('.output').html(ajax.responseText); 

значение в output является «успех» - с пространством предыдущего слова. Я не могу выбрать пробел с помощью курсора, но он есть, когда я просматриваю HTML для страницы.

Но, несмотря ни на что, линия if(returnVal == "success") всегда равна false. Я даже пробовал if(returnVal == " success"), но все же ложь.

Это все код. Я даже попробовал жесткое кодирование $formScore = 10;, чтобы убедиться, что это проблема. Несмотря на это, по какой-то причине равенство всегда выходит ложно.

Есть ли что-то очевидное, что мне не хватает? Я тестировал этот 100 различных способов и все тот же результат.

+0

У вас, вероятно, есть пробел или спецификация перед ' adeneo

+0

BOM? И нет пробелов. Все так же сложно, как может. – Birrel

+1

Худший случай, когда вы делаете 'if (returnVal.trim() ==" success ") {', но это просто взломать, лучше отправить правильную вещь с сервера – adeneo

ответ

2

В вашем файле PHP есть место, которое вызывает эту проблему. Возможно, в начале файла перед <?php.

Чтобы обойти эту проблему вы можете обрезать ответ, прежде чем использовать его в состоянии:

if (returnVal.trim() == "success") { 

Или в качестве альтернативы изменить PHP для возвращения JSON с флагом в качестве свойства, таким образом пробелы не будет вопрос.

Лучшим решением, очевидно, было бы избавиться от пространства в вашем серверном коде, однако мы не можем диагностировать эту проблему, не видя ваш PHP.

+0

Вы правы. '.trim()' сделал трюк, но в коде перед пробелами '' пробелов нет. Любые другие мысли? Они обращены друг к другу, и в файле ничего не предшествует. – Birrel

+0

@Birrel, который может быть новым символом строки. – Jai

+0

@Birrel это может быть любой символ пробела на самом деле, новая строка, вкладка и т. Д. –

1

Вы можете использовать функцию jQuery trim, чтобы удалить запасные и конечные пробелы.

if($.trim(returnVal) == "success") 
+0

Да, сработала отделка. Но теперь я пытаюсь найти, откуда это место. – Birrel

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