2013-09-19 4 views
0

hi У меня есть некоторая ajax-кодировка, в которой условие if вообще не работает, всякий раз, когда программа выполняет инструкцию else, работает даже программа, удовлетворяющая выражению if.Оператор ajax if не работает должным образом

<script type="text/javascript"> 
    function CheckDetails() 
    { 
     var http = false; 

     if (navigator.appName == "Microsoft Internet Explorer") { 
      http = new ActiveXObject("Microsoft.XMLHTTP"); 
     } else { 
      http = new XMLHttpRequest(); 
     } 

     var rid = document.new_booking.ph_number.value; 

     http.onreadystatechange = function() { 
      if (http.readyState == 4) { 
       var str_d = http.responseText; 
       if (str_d == "no") { 
        document.getElementById('cus_name').focus(); 
       } else { 
        var str_details = http.responseText; 
        var arr_details = str_details.split("~"); 
        document.new_booking.cus_name.value = arr_details[0]; 
        document.new_booking.pick_aline1.value = arr_details[1]; 
        document.new_booking.pick_aline2.value = arr_details[2]; 
        document.new_booking.pick_area.value = arr_details[3]; 
        document.new_booking.pick_pincode.value = arr_details[4]; 
        document.new_booking.drop_aline1.focus(); 
       } 
      } 
     } 
     http.open("GET", "ajax.php?evnt=det&rid=" + rid); 
     http.send(); 
    } 
</script> 

и его ajax.php файл приведен ниже

<?php 
    if ($_GET['evnt'] == 'det') { 
     $rid = $_GET['rid']; 
     include("configure.php"); 
     $select = mysql_query("select * from new_booking where ph_number = '$rid'"); 
     $count = mysql_num_rows($select); 
     if ($count > 0) { 
      $row = mysql_fetch_array($select); 
      echo $row['cus_name'] 
       . "~" . $row['pick_aline1'] 
       . "~" . $row['pick_aline2'] 
       . "~" . $row['pick_area'] 
       . "~" . $row['pick_pincode'] 
       . "~" . $row['drop_aline1'] 
       . "~" . $row['drop_aline2'] 
       . "~" . $row['drop_area'] 
       . "~" . $row['drop_pincode']; 
     } else { 
      echo "no"; 
     } 
    } 
?> 
+1

Запишите, что вы думаете 'str_d' находится прямо перед' if', это правильный результат? – tymeJV

+4

И у меня было * почти * забыто, что AJAX выглядел как перед jQuery ... – azz

+0

@Der Flatulator Это хорошая идея знать, что такое AJAX. jQuery просто заставляет его выглядеть красивее. –

ответ

1

Вы можете открыть страницу с Chrome (или Chromium), а затем отлаживать яваскрипт кода, используя встроенный отладчик (Ctrl + Shift + I, Вкладка «Консоль»). Думаю, вы увидите некоторые ошибки JS.

В принципе, ваш код работает нормально (по крайней мере, когда я удалил из него весь доступ к базе данных, так как у меня нет вашей БД).

Если вам не нравится Chrome, используйте расширение Firefox и FireBug. На странице «Сеть» вы можете увидеть, что ваш запрос ajax был выполнен (или не выполнен).

0

Если бы я должен был догадаться, я бы сказал, что некоторые пробелы проникают в ваш ответ AJAX где-то. Потому что "no " не равен "no", он всегда поражает ваш филиал else.

Возможно, вы захотите отправить обратно значение агломерации. Вы могли бы переписать весь беспорядок использовать JSON, что потребует намного меньше работы на обоих концах:

// PHP: 
if ($_GET['evnt'] == 'det') { 
    $rid = $_GET['rid']; 
    include("configure.php"); 
    $select = mysql_query("select * from new_booking where ph_number = '$rid'"); 
    $count = mysql_num_rows($select); 
    if ($count > 0) { 
     $row = mysql_fetch_array($select); 
     // YOU PROBABLY WANT TO WHITELIST WHAT YOU PASS TO JSON_ENCODE 
     echo json_encode($row); 
    } else { 
     echo json_encode([ "error" => "no" ]); 
    } 
} 

// js: 
http.onreadystatechange = function() { 
    if (http.readyState == 4) { 
     var str_d; 
     try { 
      str_d = JSON.parse(http.responseText); 
     } catch(e) { 
      str_d = false; 
     } 

     if (str_d && str_d.error === "no") { 
      document.getElementById('cus_name').focus(); 
     } else { 

      document.new_booking.cus_name.value = str_d.pick_aline1; 
      document.new_booking.pick_aline1.value = str_d.pick_aline2; 
      document.new_booking.pick_aline2.value = str_d.pick_area; 
      // etc... 
     } 
    } 
} 
+0

Я пробовал это, но я получаю много ошибок, и я новичок в ajax, поэтому я не знаю, как исправить –

0

У меня была аналогичная проблема. Это сработало для меня.

if (str_d.replace(/^\s+|\s+$/g, '') == "no") 
Смежные вопросы