2016-02-29 3 views
0

Этот код пытается заполнить выпадающий список в форме со значениями. Я тестировал PHP отдельно, и запрос был в порядке (не зря!). У меня есть аналогичная форма с 3 связанными выпадающими списками, и они работают безупречно. Отлаживая это в Mozilla, я замечаю, что функция успеха JSON не выполнена. Я не понимаю, почему.Простой код JSON не работает

JavaScript

$(document).ready(function() 
    { 
    $.getJSON("/scripts/033A_GetJudet.php", success = function(data) 
     { 
     var str_options = ""; 
     for (var i=0; i < data.length; i++) 
      { 
      str_options += "<option value='" + data[i] + "'>" + data[i] + "</option>"; 
      } 

     $("#selJudet").append(str_options); 

//  var selOption = document.getElementById("selJudet"); 
//  selOption.selectedIndex = localStorage.getItem("selJudIndex") || 0; 
//  document.getElementById("selJudet").selectedIndex = selOption.selectedIndex; 

     $("#selJudet").change(); 

     }); 

    $("#selJudet").change(function() 
    { 
    var selText = document.getElementById("selText"); 
// selText.value = selText.defaultValue; 
    selText.value = "Abcgcfkjsdhfsjkdh"; 

// $("#selText").change(); 

    }); 

}); 

PHP (я пропустил код подключения к базе данных)

$query = '(SELECT 1 AS sc, nume_judet FROM sa_Judet '; 
$query .= 'WHERE nume_judet <> "N/A") UNION '; 
$query .= '(SELECT 2 AS sc, "N/A" FROM sa_Judet) '; 
$query .= 'ORDER BY sc, nume_judet'; 

//print $query; 

$result = mysqli_query($db_conn, $query); 

$judet = array(); 

if ($result == FALSE) 
    { 
    array_push($judet, 'QUERY_ERROR'); 
    goto _adr1; 
    } 

$rows = mysqli_num_rows($result); 
if ($rows == 0) 
    { 
    array_push($judet, 'TBD_'); 
    goto _adr1; 
    } 

while ($row = mysqli_fetch_array($result)) 
     { 
     array_push($judet, $row['nume_judet']); 
     } 

_adr1: 
print json_encode($judet); 

mysqli_free_result($result); 
mysqli_close($db_conn); 

?> 

Ajax вариант моего оригинального Javascript

$(document).ready(function() 
    { 

    $.ajax({ 
    url: "/scripts/033A_GetJudet.php", 
    dataType: 'json', 
    success: function(data) 
    {console.log('SUCCESS: ', data);}, 
    error: function(data) 
    {console.log('ERROR: ', data);} 

    var str_options = ""; 
    for (var i=0; i < data.length; i++) 
     { 
     str_options += "<option value='" + data[i] + "'>" + data[i] + "</option>"; 
     } 

    $("#selJudet").append(str_options); 

    var selOption = document.getElementById("selJudet"); 
    selOption.selectedIndex = localStorage.getItem("selJudIndex") || 0; 
    document.getElementById("selJudet").selectedIndex = selOption.selectedIndex; 

    $("#selJudet").change(); 

    }); 

    $("#selJudet").change(function() 
     { 
     var selText = document.getElementById("selText"); 
     selText.value = selText.defaultValue; 

//  $("#selText").change(); 

     }); 

}); 
+0

"goto" ... Ugh. Я предлагаю использовать более современный код. Отделите вас, если хотите, бросьте раньше, никогда не используйте goto's. Не проблема. Что скажет сетевая панель о запросе? Означает ли он статус возврата, отличный от 200? – MaxArt

+0

JavaScript получает 304, скрипт PHP получает 200. – Mikey

+0

Если функция успеха не выполняется, добавьте функцию ошибки и посмотрите на ее аргументы. 'getJSON' не принимает один аргумент, поэтому вам нужно будет вызвать' .fail (someFunction) 'по обещанию [согласно документации] (http://api.jquery.com/jquery.getjson/) , – Quentin

ответ

-2

Заменить эту строку

$.getJSON("/scripts/033A_GetJudet.php", success = function(data) 

с этим одним

$.getJSON("/scripts/033A_GetJudet.php", function(data) 
+0

Фактически правильным синтаксисом будет «..., успех функции (данные)», но первый упомянутый, с равным знаком также действителен – mschr

+0

Удаление 'success =' shouldn Это не значит, что исходный код просто назначает функцию глобальной переменной, а затем как знак результата (все еще функция) является вторым аргументом getJSON. – Quentin

+0

potatoo potaato :) – mschr

0

Это, возможно, ошибка в анализе полученных данных. HTTP 304 такой же, как HTTP 200, только содержимое извлекается из кеша, а не на сервер.

$.ajax({ 
    url: url, 
    data: data, 
    success: function(response, textStatus, jsqxhr) { 
    var obj; try { obj = eval(response); } catch(e) { console.error(e); } 
    // -- do something with obj -- 
    }, 
    fail: function(jqxhr, textStatus, error) { 
    console.log("error", textStatus, error); 
    } 
}); 

Используйте эту функцию вместо этого и посмотрите ближе к данным. Если данные возвращаются через success, мы пытаемся оценить строку json в объекте. Если это не удастся, генерируется исключение (возможно, SyntaxError), и журнал должен показать это.

+0

Где в моем коде выше я помещаю ваш код? Честно говоря, я не знаю, где. – Mikey

+0

Внесите его, вместо вызова $ .getJSON используйте $ .ajax. Это вернет ответ в виде строки вместо JSON, который уже обрабатывается в объект. eval преобразует его в объект. Вы проверили Console.Log? – mschr

+0

Я добавил к своему исходному сообщению (см. Выше) свой код, используя $ .ajax, но что-то не так с тем, что я написал, отладчик даже не отображает его в списке скриптов. – Mikey

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