Как я могу добавить запись в таблицу HABTM в CakePHP, используя событие onItemSelect JQuery Autosuggest? - PullRequest
0 голосов
/ 31 января 2012

Я использую AutoSuggest в качестве подсказки для поиска, чтобы добавить Предмет в Grocerylist (groclist).Когда пользователь выбирает предложение, он должен добавить элемент в GroceryList с помощью AJAX и перезагрузить элементы в этом списке бакалеи.Я использую учебник, найденный в Автозаполнение Jquery в CakePHP , чтобы выполнить Автозаполнение, но я застрял.

Как добавить ассоциацию?

$(document).ready(function(){
$("#autoComplete").autocomplete("/groceries/items/autoComplete",
{
    minChars: 2,
    cacheLength: 10,
    onItemSelect: selectItem,
    onFindValue: findValue,
    formatItem: formatItem,
    selectFirst: true
});
});
// This is was here
function selectItem(li) {
findValue(li);
}


function addAssociation(li) {

}

function findValue(li) {
if( li == null ) {return alert("No match!");}

// if coming from an AJAX call, let's use the product id as the value
if( !!li.extra ) {var sValue = li.extra[0];}

// otherwise, let's just display the value in the text box
else {var sValue = li.selectValue; }

//alert("The value you selected was: " + sValue);
}

function formatItem(row) {
if(row[1] == undefined) {
    return row[0];
}
else {
    //return row[0] + " (id: " + row[1] + ")"; original displays Cake (id: 1)
    return row[0];
}
}

1 Ответ

0 голосов
/ 31 января 2012

Вы должны использовать вызов ajax с объектом json. Я имею в виду выполнение ajax-вызова к действию в виде торта (обычный торт, такой как веб-страница), но этот вернет вам объект json. Объект json должен использоваться для получения информации о сохраненных данных, например, если произошла ошибка или что-то в этом роде.

что-то вроде этого:

  $.ajax({
    type: 'POST',
    url: url,
    data: param,
    dataType: "json",
    success: function(data) {
        if (data != null && data.error != null) {
            alert('An error ocurred: '+data.error);
        }
        else {
            yourRefreshFunction();
        }
    },
    error: function(data) {
        try {
            alert('An error ocurred: '+data.error);
        } catch (e) { }
    }
});

Надеюсь, это поможет вам: D

EDIT:

В вашем случае было бы что-то вроде этого (не забудьте изменить yourRefreshFunction для реальной функции обновления или после функции succes или всего, что вы хотите сделать после сохранения): функция selectItem (li) {

 //in your cake controller you will receive it as $this->data if you put the name like that
var param = [
    { name: "data[Model][field]", value: findValue(li) }
];
  $.ajax({
    type: 'POST',
    url: url,
    data: param,
    dataType: "json",
    success: function(data) {
        if (data != null && data.error != null) {
            alert('An error ocurred: '+data.error);
        }
        else {
            yourRefreshFunction();
        }
    },
    error: function(data) {
        try {
            alert('An error ocurred: '+data.error);
        } catch (e) { }
    }
});
}
...