0

私は基本的に、想定されるユーザーが何かを書き、jQuery が提案のリストを返し、ユーザーが 1 つを選択する一般的なオートコンプリート検索バーを構築しています。

私のAJAX 呼び出しは次のようになります。

var response = '';
var request = $.ajax({
 url: "./includes/search_products.php",
 type: "post",
 dataType: "json",
 data: serializedData,
 success : function(text) {
    response = text; // Gets the list of suggestions
 }
});

応答は次のとおりです。

{"id":"2",
"companyId":"15",
"productTypeId":"1",
"label":"Alfa Romeo 159",
"price":"50000","comments":
"Random comment."}

.autocomplete の設定方法:

request.done(function (){
        console.log("Works.");
        $('#product_search').autocomplete({
            source: response,
            minLength: 1,
            select: function(event, ui) {
                alert("yey");
            }
        });
    });

私が得るエラーメッセージは次のとおりです。

TypeError: this.source is not a function

PHP json_encode() のドキュメントに記載されている内容に基づいて、通常の応答では引用符を少なくする必要があると思います。

どうしたの?:(

4

2 に答える 2

1

これは明確な答えではありませんが、おそらくこれが当てはまります..

あなたは文字列を持っているオブジェクトを持っていません..最初にこれを試してみてくださいそれを取得した後、変数応答の型を確認してください$.type(response)

response = JSON.parse(response);

おそらくこれはあなたの問題です

于 2013-01-28T04:56:02.890 に答える
0

OK、2日後に解決策を見つけました。いつか誰かの役に立つことを願っています。8時間の宣誓に値するAJAXはありません。これはチュートリアルではありませんが、動作するバージョンに到達するために私が抱えていた問題のいくつかをカバーしています。

json_encodeを使用してオブジェクト(Productなど)をJSONに変換していました。Productクラスは、1つの関数jsonSerialize()で構成されるJsonSerializableインターフェイスも実装します。

元の投稿でのjsonSerialize()の実装は長かったのですが、最終的には次のようになりました。

function jsonSerialize() {
    return [
        'id' => $this->id,
        'label' => $this->name
    ];
}

オートコンプリートをオブジェクトまたは実際には1次元配列以外のもので機能させるには、「ラベル」フィールドまたは「値」フィールドのいずれかが必要です。ラベルはオートコンプリート候補として表示されますが、ラベルの1つを選択すると、入力にラベルが表示されます。

これが私の実際のオートコンプリート関数の外観です。

$("#product_search").autocomplete({
    source: "./includes/search_products.php",
    minLength: 1,
    select: function(event, ui) {
        /* Do something */
    }
});

私の問題は、json_encode($ product)で単一のオブジェクトを返すことでした。私が言いたいのは、$ product = new Product(...)ということです。オートコンプリート関数のソースオプションには、単一の製品だけでなく、製品の配列が必要なようです。

解決:

if(!is_array($product))
    $product = array($product);

私のコードは元の投稿で間違っていませんでした。すべてがうまくいくように、これらの2行だけが私のPHPスクリプトから欠落していました。

何度も何度も。

于 2013-01-31T01:11:37.267 に答える