2010-09-21 67 views
0

在这个网站:http://www.rent-turkey-property.com/的getJSON更新不更新

我有它设置,这样,当您从下拉列表(左框)选择一个区域它拉在城镇使用jQuery.getJson

镇菜单

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

麻烦就是一切似乎工作正常。萤火虫告诉我我有数据,但它不会更新选择#镇

驾驶我疯了。

UPDATE:

更新

我现在已经发现,它与JSON(parsererror无效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; 
}?> 
+0

使用源代码控制在这样的情况是非常有益的。它使变更追踪非常简单。 – MikeWyatt 2010-09-22 13:28:12

回答

2

你需要用引号括你的钥匙:

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

这是我尝试的第一件事情之一。不幸的是它从来没有工作。即使是简单地调用.getJSON并在响应元素中添加每个项目,Ajax也会有相同的错误 – 2010-09-22 21:16:39

+0

原来你是对的,当我尝试添加引号到键时,我必须做个笨蛋。问题出现是因为jQuery 1.4更改为使用本机JSON解析器,与之前版本中的EVAL相反 – 2010-10-04 13:01:38

0

试着改变你的Ajax响应的内容类型为application/JSON而不是text/html的。

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>'; 
    }