Обновление getJSON не обновляется - PullRequest
0 голосов
/ 22 сентября 2010

На этом сайте: http://www.rent -turkey-property.com /

У меня установлено так, что когда вы выбираете регион из выпадающего списка (левое поле), он вытягиваетсягорода для меню городов с помощью jQuery.getJson

Мой код работал, когда он был в заголовке каждой страницы, но, кажется, сломался при перемещении во внешний файл (или, возможно, другое изменение сломало его, уверен, что я проверилэто после перевода на внешний)

Беда в том, что вроде все работает нормально.Firebug говорит мне, что у меня есть данные, но они не будут обновляться выберите # town

сводит меня с ума.

ОБНОВЛЕНИЕ:

Обновление

IТеперь я обнаружил, что это ошибка с JSON (parsererror Invalid JSON), но раньше он работал нормально, и я не изменил его.

Единственное, что я изменил, это то, что я не смогобратное тестирование - это обновление до последней версии jQuery, в последней версии (1.4.2) изменен стандарт JSON.

Вот мой JSON:

<?php
if ($_GET['region'] == "Aegean") {
  echo <<<HERE_DOC
[ 
{optionValue: 'Altinkum', optionDisplay: 'Altinkum'},
{optionValue: 'Bodrum', optionDisplay: 'Bodrum'},
{optionValue: 'Cesme', optionDisplay: 'Cesme'},
{optionValue: 'Dalaman', optionDisplay: 'Dalaman'},
{optionValue: 'Dalyan', optionDisplay: 'Dalyan'},
{optionValue: 'Fethiye', optionDisplay: 'Fethiye'},
{optionValue: 'Icmeler', optionDisplay: 'Icmeler'},
{optionValue: 'Gocek', optionDisplay: 'Gocek'},
{optionValue: 'Kusadasi', optionDisplay: 'Kusadasi'},
{optionValue: 'Marmaris', optionDisplay: 'Marmaris'},
{optionValue: 'Oludeniz', optionDisplay: 'Oludeniz'}
]
HERE_DOC;
} else if ($_GET['region'] == "Mediterranean") {
  echo <<<HERE_DOC
[
{optionValue: 'Alanya', optionDisplay: 'Alanya'},
{optionValue: 'Antalya', optionDisplay: 'Antalya'},
{optionValue: 'Belek', optionDisplay: 'Belek'},
{optionValue: 'Kalkan', optionDisplay: 'Kalkan'},
{optionValue: 'Kas', optionDisplay: 'Kas'},
{optionValue: 'Kemer', optionDisplay: 'Kemer'},
{optionValue: 'Saklikent', optionDisplay: 'Saklikent'},
{optionValue: 'Side', optionDisplay: 'Side'}
]
HERE_DOC;
} else if ($_GET['region'] == "Istanbul") {
  echo <<<HERE_DOC
[{optionValue: 'Istanbul', optionDisplay: 'Istanbul'}]
HERE_DOC;
}?>

Ответы [ 3 ]

2 голосов
/ 22 сентября 2010

Вам нужно заключить ключи в кавычки:

[ 
{'optionValue': 'Altinkum', 'optionDisplay': 'Altinkum'},
{'optionValue': 'Bodrum', 'optionDisplay': 'Bodrum'},
{'optionValue': 'Cesme', 'optionDisplay': 'Cesme'},
// ... other entries ...
]
0 голосов
/ 22 сентября 2010

Используйте "json" вместо "application / json" в опции dataType при вызове $ .ajax ().

Проблема в том, что jQuery не преобразует содержимое HTTP-ответа в JSON, поэтому ваша функция успеха выполняет итерацию по строке.

Кроме того, ваша итерационная функция ссылается на исходный массив, а не на текущий элемент. Либо используйте resp[index], this, либо добавьте аргумент element в функцию.

success: function(resp){
    var options = '';
    $.each(resp,function(index) {
        options += '<option value="' + this.optionValue + '">' + this.optionDisplay + '</option>';
    }
0 голосов
/ 22 сентября 2010

Попробуйте изменить тип содержимого ваших ответов ajax на application / json вместо text / html.

...