2010-05-27 5 views
2

Я застрял в колею. Я надеюсь, что кто-то может помочь.Передача переменной в jQuery AJAX

В принципе, я создаю мобильное веб-приложение AJAX с помощью jQuery. Я могу просто проанализировать конкретный XML-файл, но я хочу, чтобы опция анализировала другие файлы XML на основе ссылки, на которую они были нажаты, и загружать их на лету в один и тот же DIV или UL.

Итак:

нажмите на LINK1, грузы XML1
нажмите на LINK2, грузы xml2

Я хотел бы быть в состоянии сделать это все на стороне клиента, так что нет PHP (или это плохо идея?). Этот код jquery, который я использовал:

$(document).ready(function() {   

     $("a.load_ajax").click(loadAjax()); 

     function loadAjax() { 
      var fileID = get('?lineID='); 

      var dataID = "xml/" + fileID + ".xml" 

      $.ajax({ 
       type: "GET", 
       url: dataID, 
       dataType: "xml", 
       success: parseXml 
      }); 

      function parseXml(xml) { 
       $(xml).find("train").each(function() { 
        $("ul#ajax-output").append('<li>' + $(this).find("time").text() + '</li>'); 
       }); 
      } 
     }   

}); 

Его просто не работает вообще. Я передавал переменную, используя GET в URL. Таким образом, ссылка в HTML идет в /? LineID = SBD_to_Union, и она должна загружать XML-файл с именем SBD_to_Union.xml

Понимать кого-нибудь? Я был бы рад помочь.

+0

Hrm? Если нет кода на стороне сервера, почему параметры запроса влияют на что-либо? – Matchu

ответ

1

С чем вы, похоже, пытаетесь получить линию от url в якоре. Используйте $ (this), чтобы получить атрибут href для ссылки. Затем вы можете использовать регулярное выражение, если URL-адрес описан как описано, чтобы удалить все, кроме идентификатора строки, для использования при построении ссылки для XML. Я предполагаю, что XML является стороной сервера и относительно текущего URL-адреса. Если нет, вам нужно будет отрегулировать путь. Я взял на себя смелость немного сжать, поставив функции inline. Редактировать: и обработчик клика должен возвращать значение false, чтобы предотвратить фактическое выполнение ссылки по умолчанию.

$(function() {   

    $("a.load_ajax").click(function() { 
     var fileID = $(this).attr('href').replace(/.*?lineID=/,''); 

     var dataID = "xml/" + fileID + ".xml" 

     $.ajax({ 
      type: "GET", 
      url: dataID, 
      dataType: "xml", 
      success: function(xml) { 
       $(xml).find("train").each(function() { 
        $("ul#ajax-output").append('<li>' + $(this).find("time").text() + '</li>'); 
       }); 
      } 
     }); 
     return false; 
    });   
}); 
+0

Это сделало это, спасибо большое !!! – Scott

0
<a href="#" id="link1" class="load_ajax">Link1</a> 
<a href="#" id="link2" class="load_ajax">Link2</a> 

Вы можете сделать что-то в зависимости от идентификатора HREF (или другой из его атрибутов или его HREF значения).

$(function() { 
    $("a.load_ajax").click(loadAjax); 
}); 

function loadAjax() 
{ 
    if ($(this).attr("id") == "link1") 
    { 
    alert("link1"); //load xml1 
    } 
    else 
    { 
    alert("link2"); //load xml2 
    }; 
} 
+0

... и если у вас есть 50 ссылок? –

+0

Есть не 50 ссылок, только 2 в этом примере, так зачем писать 50 ссылок? – CRice

+0

Я думаю, что точка Габи была в том, что это не очень масштабируемо ... – bobsoap

1

Вы проверили, возвращает ли функция get правильные данные?

добавить alert(fileID); сразу после get(..); линии ..

Но почему бы вам не создать адреса, чтобы указать непосредственно в XML-файлах вместо разбора и создания URL-адресов на лету?

просто сделать ссылку в HTML, чтобы указать на xml/SBD_to_Union.xml

+0

Если javascript отключен, URL-адрес может загружать другую страницу с правильными данными. Это было мое предположение. – tvanfosson

+0

Потому что я хочу иметь возможность использовать другие файлы XML позже с проектом, а не только с этим. – Scott

+0

@Scott - Я думаю, он предполагает, что ссылка href ** будет ** XML-путь, который можно использовать напрямую. – tvanfosson

1

На первый взгляд, я думаю, что ваш Ajax() синтаксис поодаль.

Вы используете строки запроса по определенной причине? Если нет, то я бы попытаться дать HTML-код ссылки абсолютный URL к файлу XML вы пытаетесь принести:

<a href="xml/file123.xml"></a> 

Тогда попробуйте это:

$("a.load_ajax").click(function(e) { 
e.preventDefault(); 
var url = $(this).attr('href'); 

      $.ajax({ 
       type: 'GET', 
       url: url, 
       dataType: 'xml', 
       success: function(response) { 
        $(response).find('train').each(function() { 
         $('ul#ajax-output').append('<li>' + $(this).find('time').text() + '</li>'); 
       } 
      }); 

     }); 

Я не проверял, но он должен делать то, что вы хотите.

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