2012-01-09 2 views
1

form_page.htmlАякса - доступ к переменным, установленным в URL:

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <script src="js/process_truck_req.js"></script> 
    <script src="js/jquery-1.2.3.pack.js"></script> 
    <script src="js/runonload.js"></script> 
</head> 

<div class="prform" id ="request_form">  
    <form name="truckreq" action="" method="post" class="truckreq_form"> 
     <label for="seltruck" id="seltruck_label"><font class="whitetext">Select Truck</font></label><br /> 
     <select name="seltruck" id="seltruck"> 
      <option value="Select a Truck"> Select a Truck</option> 
      <option value="2011+Tacoma">2011 Tacoma</option> 
      <option value="2008+Tundra">2008 Tundra</option> 
      <option value="2000+Tacoma">2000 Tacoma</option> 
     </select><br /> 
     <label class="error" for="seltruck" id="seltruck_error"><font class="redtext">This field is required.</font></label><br /> 
     <label class="error" for="seltruck" id="seltruck_noavail_error"><font class="redtext">Not Available on selected Dates.</font></label><br /> 
    </form> 

process_request.js

$(function() { 
    $('.error').hide(); 
    $('input.text-input').css({backgroundColor:"#FFFFFF"}); 
    $('input.text-input').focus(function(){ 
    $(this).css({backgroundColor:"#FFDDAA"}); 
}); 

$('input.radio-input').focus(function(){ 
    $(this).css({backgroundColor:"#FFDDAA"}); 
}); 

$('input.text-input').blur(function(){ 
    $(this).css({backgroundColor:"#FFFFFF"}); 
}); 

$(".button").click(function() { 
    // validate and process form 
    // first hide any error messages 
    $('.error').hide(); 

    var seltruck = $("#seltruck").val(); 
    if (seltruck == "Select a Truck") { 
     $("label#seltruck_error").show(); 
     $("#seltruck").focus(); 
      return false; 
     } 

     var truckSearch = 'seltruck=' + seltruck + '&outdate=' + outdate + '&indate=' + indate; 

     $.ajax({ 
      type: "POST", 
      url: "do_truck_search.php", 
      data: truckSearch, 
      success: function() { 
       var truck_status = $("#truck_status").val(); 
       if (truck_status == "nopass") { 
        $("label#seltruck_noavail_error").show(); 
        $("#seltruck").focus(); 
        return false; 
       } 
      } 
     }); 
    }); 
}); 

runOnLoad(function() { 
    $("input#projdesc").select().focus(); 
}); 

Возьмите входные данные формы из form_page.html, перейти к process_request.js для проверки. Я только показывал seltruck, другие поля формы заданы в form_page.html.

При проверке .js поля проверяют, заполнены ли они, если нет, класс меток ошибок отображается на form_page.html.

Поле формы seltruck требует запроса mysql и проверки доступности. У меня скрипт do_truck_search.php работает отлично, но не знаю, как передать переменную «truck_status» из do_truck_search.php обратно в вызов .ajax.

Вернувшись к вызову .ajax, я хотел бы добиться успеха: «продолжить» или ошибку: отобразить метку # seltruck_noavail_error.

любая помощь?

спасибо!

ОБНОВЛЕНИЕ - не может заставить это работать? dataType: «текст» в .ajax работает? Есть предположения?

do_truck_search.php

if (($unixoutdate >= $dbunixoutdate) && ($unixoutdate <= $dbunixindate) && ($dbtruck == $seltruck_final)){ 
    $truck_status = "nopass"; 
    $data2 = array('truck_status' => $truck_status); 
    echo json_encode($data2); 
} 

process_request.js:

$.ajax({ 
    type: "POST", 
    url: "do_truck_search.php", 
    data: truckString, 
    dataType: "json", 
    success: function(data) { 
     if (data.truck_status == "nopass"){ 
      $("label#seltruck_noavail_error").show(); 
     } 
    } 
}); 

UPDATE

Я думаю, что причина, почему тип данных JSON был ненадежным, потому что маленький квадрат (вероятно, space) является эхо-кодом из PHP-скрипта. Использование типа данных: «текст» и предупреждение() в обратном вызове .ajax success показывают небольшой квадрат перед фактическим текстом данных. Мое грязное решение состояло в том, чтобы использовать тип данных: текст, а затем просто подстроить фактические данные, которые я хочу получить.

Я искал hi/low в скрипте PHP, чтобы найти причину эхо-пробела, но не смог найти его?

ответ

0

Один из возможных способов сделать это:

  1. В $.ajax установлен dataType: "json"
  2. В PHP скрипт echo json_encode(array("truck_status" => $truck_status));. Обратите внимание, что никакой другой выход не должен присутствовать (так что отключите ваши макеты, представления и т. Д.)
  3. Изменение success: function() {...} по success: function(data, status) {...}; теперь переменная data будет содержать ключ truck_status с тем, что вы его установили. Поэтому обращайтесь к нему с помощью data.truck_status.
+0

благодарит за помощь! Я смог эхо «nopass» в PHP и захватил его с помощью dataType: «text» в вызове .ajax, но никогда не получал json-метод, см. Выше обновление .... – dan

+0

Я получил вид метода json от работы, похоже примерно на 1/2 момента, когда data.truck_status неверен или вообще не отображается? Я использую alert (данные.truck_status); – dan

+0

может ли браузер кэшировать data.truck_status? В PHP я обязательно отключусь ($ truck_status ['truck_status']); ?? благодаря! – dan

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