0

以下の ajax コードは、php から json 配列を受け取っています。私がコメントとして書いた残りの詳細:

 $.ajax({
     type: "POST",
     url: "dbtryout2_2.php",
     data: datastr,
     cache: false,
     //dataType: 'json',
     success: function (arrayphp) {
         //"arrayphp" is receiving the json array from php.
         //below code is working where iam displaying the array directly
         //This code displays the array in raw format.       
         $(".searchby .searchlist").append(arrayphp);
     }

 });

友人はこのセクションに集中しています。ここで問題をより明確かつ正確に説明します: 1) 成功関数には 2 つのコードがあります 2) 1 つはコメント解除され、もう 1 つはコメントされています 3) コメントされたコードは、コード "dataType: "json にコメントすると機能します"", 4)しかし、コメント化されていないコードは、以下のコードが現在持っている状況では機能しません

 $.ajax({
     type: "POST",
     url: "dbtryout2_2.php",
     data: datastr,
     dataType: "json",
     cache: false,
     success: function (arrayphp) {
         $.each(arrayphp, function (i, v) {
             alert(i + "--" + v);
         });
         /*$(".searchby .searchlist").append(arrayphp);*/
     },
     error: function (xhr) {
         console.log(xhr.responseText);
     }

 });

以下は、JSON 配列を返す責任を負う PHP コード スニペットです。

 $arrayphp = array();
 //$result is containing the list of albums
 //iam one by one taking the album names and assigning it to $row
 //then from $element iam pushing the elements in $arrayphp
 //after pushing all the elements iam returning the json encoded array to ajax code.  
 while ($row = mysql_fetch_array($result)) {
     $element = $row['cat_name'];
     array_push($arrayphp, $element);
 }
 echo json_encode($arrayphp);
 }

返される配列はアルバム名のリストです:

["album1", "album2", "album5", "album4", "album6", "album7", "album8", "album9", "album10", "album11"]

上の正確な配列が返されます。

誰かが私のコードに問題があることを理解できますか?

4

2 に答える 2

0

私はあなたの機能を試してみましたが、この行を省略したときにうまくcontentType: "application/json",いきました.

マニュアルでは、ほとんどの場合にこのコンテンツ タイプを使用するように指示されて'application/x-www-form-urlencoded; charset=UTF-8'います (これがデフォルトです)。したがって、よほどの理由がない限り、その行は削除する必要があると思います。

最初の関数では、それは存在せず、'json' dataType をオフにしたため、必要なデータのように見える非常に見栄えの良い文字列を警告している可能性があります。があることを確認してdataType: 'json'削除contentType: application/json'すれば、問題ありません。

編集:これはまさに私が使用したものであり、うまく機能しました。他に何を提案すればよいかわかりません。datastrあなたのjsには何がありますか?

$.ajax({
    url:      'dbtryout2_2.php',
    type:     'post',
    async:    true,
    cache:    false,
    dataType: 'json',

    success: function( response )
    {
        // response is returned as json object: ["album1","album2","album3","album4","album5"]
        //console.log(response);

        if ( response )
        {
            $.each(response, function (i, v) {
                alert(i + "--" + v);
            });
        }
    },

    error: function( xhr )
    {
        console.log(xhr.responseText);
    }
});

: "dataType:'json'" を指定した場合は、既に JSON として応答が返されているため、$.parseJSON を実行する必要はありません。

于 2013-09-01T00:14:50.467 に答える