getJSON更新未更新

时间:2010-09-21 21:08:32

标签: jquery getjson

在此网站上:http://www.rent-turkey-property.com/

我设置好了,当你从下拉列表中选择一个区域(左框)时,它会使用jQuery.getJson

拉入城镇菜单的城镇。

当我的代码在每个页面的头部时工作但是当移动到外部文件时似乎已经破坏了(或者可能是另一个更改破坏了它,确保我在转移到外部后检查了它)

问题是一切似乎都运转正常。 Firebug告诉我我有数据,但它不会更新select#town

让我疯了。

更新:

更新

我现在发现它是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 个答案:

答案 0 :(得分:2)

您需要将密钥包装在引号中:

[ 
{'optionValue': 'Altinkum', 'optionDisplay': 'Altinkum'},
{'optionValue': 'Bodrum', 'optionDisplay': 'Bodrum'},
{'optionValue': 'Cesme', 'optionDisplay': 'Cesme'},
// ... other entries ...
]

答案 1 :(得分:0)

尝试将ajax响应的内容类型更改为application / json而不是text / html。

答案 2 :(得分:0)

在调用$ .ajax()时,在dataType选项中使用“json”代替“application / json”。

问题是jQuery没有将HTTP响应内容转换为JSON,因此您的成功函数正在迭代字符串。

此外,您的迭代函数将引用原始数组,而不是当前项。使用resp[index]this或在函数中添加element参数。

success: function(resp){
    var options = '';
    $.each(resp,function(index) {
        options += '<option value="' + this.optionValue + '">' + this.optionDisplay + '</option>';
    }