Jquery 如何通过AJAX和JSON将数组从PHP转换为JAVASCRIPT?

Jquery 如何通过AJAX和JSON将数组从PHP转换为JAVASCRIPT?,jquery,json,ajax,wordpress,Jquery,Json,Ajax,Wordpress,有人能帮我吗?看起来我得到的是字符串而不是数组。 一旦我通过AJAX将数组(这是sql查询的结果)从PHP传递到Javascript,我想循环数组并在表单中填充一些字段。 我发布代码: JAVASCRIPT (function($){ $(document).ready(function() { $('#input_12_153').change(function (){ if ($('#input_12_153').attr("value")==

有人能帮我吗?看起来我得到的是字符串而不是数组。 一旦我通过AJAX将数组(这是sql查询的结果)从PHP传递到Javascript,我想循环数组并在表单中填充一些字段。 我发布代码:

JAVASCRIPT

(function($){
    $(document).ready(function() {
        $('#input_12_153').change(function (){
            if ($('#input_12_153').attr("value")== 'no-selection'){
                $('#input_12_48').val( '' );}
            else{
                var valor = $('#input_12_153').attr("value");
                jQuery.ajax({ // We use jQuery instead $ sign, because Wordpress convention.
                    url : '/optcat/wp-admin/admin-ajax.php', // This addres will redirect the query to the functions.php file, where we coded the function that we need.
                    type : 'POST',
                    data : {
                        action : 'my_action', 
                        fieldvalue : valor,
                    },
                    success: function(data) {
                        alert( data );
                        //Here I would like to loop the array and get the values
                    }
                });
            }
        });
    });
})(jQuery);
PHP(Functions.PHP)

用于将PHP中的字符串转换为数组

success: function(data) {
    var results = JSON.parse(data); // like this
    alert( data );
    //Here I would like to loop the array and get the values
}

在我的例子中,不需要使用
JSON.parse(数据),否则我会得到一个错误“JSON中位置1处的意外标记o”
只需输入
数据类型:“json”
就足够了。 我发布我的最终代码:

functions.php

add_action( 'wp_ajax_my_action', 'my_action' );
add_action( 'wp_ajax_nopriv_my_action', 'my_action' ); // This lines it's because we are using AJAX on the FrontEnd.

function my_action(){
    global $wpdb;

    $tablename = $wpdb->prefix . 'rg_lead_detail';
    $lead_id = $_POST['fieldvalue'];  // This variable will get the POST 'fieldvalue'
    $form_id = 21;

    $sql = "SELECT value FROM $tablename WHERE lead_id = %d AND form_id= %d";

    $results = $wpdb->get_results( $wpdb->prepare( $sql, $lead_id, $form_id ), ARRAY_A );

    echo json_encode($results,JSON_FORCE_OBJECT);
} 
add_action( 'wp_ajax_my_action', 'my_action' );
add_action( 'wp_ajax_nopriv_my_action', 'my_action' ); // This lines it's because we are using AJAX on the FrontEnd.

function my_action(){
    global $wpdb;

    $tablename = $wpdb->prefix . 'rg_lead_detail';
    $lead_id = $_POST['fieldvalue'];  // This variable will get the POST 'fieldvalue'
    $form_id = 21;

    $sql = "SELECT value FROM $tablename WHERE lead_id = %d AND form_id= %d";

    $results = $wpdb->get_results( $wpdb->prepare( $sql, $lead_id, $form_id ), ARRAY_A );

    echo json_encode($results);

    die();
} 
Javascript

(function($){
    $(document).ready(function() {
        $('#input_12_153').change(function (){
            if ($('#input_12_153').attr("value")== 'no-selection'){
                $('#input_12_48').val( '' );}
            else{
                var valor = $('#input_12_153').attr("value");
                jQuery.ajax({ // We use jQuery instead $ sign, because Wordpress convention.
                    url : '/optcat/wp-admin/admin-ajax.php', // This addres will redirect the query to the functions.php file, where we coded the function that we need.
                    type : 'POST',
                    data : {
                        action : 'my_action', 
                        fieldvalue : valor,
                    },
                    dataType:'json',
                    success: function(data) {
                        //var results = JSON.parse(data); // like this
                        $(data).each(function(i,val){
                            $.each(val,function(k,v){
                                alert(k+" : "+ v);     
                            });
                        });
                    }
                });
           }
       });
    });
})(jQuery);

在php中添加正确的
标题
-
标题('Content-Type:application/json')
或指定ajax中返回的数据类型-
dataType:'json',
addinjs
dataType:'json',
我同意@guradio。由于您将数据作为json编码的数据从PHP发送到Javascript,因此在ajax中添加
dataType:“json”
将自动将数据解析为对象。
json\u encode
返回一个json编码的字符串,您需要使用
json.parse()
将该字符串转换为数组,
dataType
没有太大区别。谢谢你的回答,但我得到:未捕获的语法错误:JSON中的意外标记o位于Object.complete(csu.js?ver=170505-82345:77)的JSON.parse()的JSON.parse()的位置1,位于Object.fireWith的I(jquery.js:2),位于y(jquery.js:4)的XMLHttpRequest.c(jquery.js:4)在哪里调用my_action()
?my_action是wordpress的functions.php文件中的一个函数。当选择一个下拉字段时,我调用我的_操作,将var传递给进行sql查询的函数,并将结果与数组一起发送回javascriptconsole.log
data
以查看它是否为空。如果我将数据类型设置为“json”,我需要将操作从成功更改为完成,否则它不会执行任何操作。。如果我删除数据类型:“json”,即使操作成功,它也会工作。数组不是空的。我不理解这种行为。。这里是我可以在控制台中看到的值:“[{”值“:“ASSL u33”},{”值“:“Padova”},{”值“:“Pagetta”},{”值“:”info@pagetta4500.it},{“值”:“Sruffo”},{“值”:sruffo@opt-ita.com“}]0“是的,此解决方案非常有效!非常感谢您的支持:)