AJAX做我需要它做的事情,但错误仍然发生

时间:2017-02-23 15:58:12

标签: javascript php jquery mysql ajax

我正在编写一个网页,该网页从html表中读取数据,以便在使用PHP的MySQL查询中使用。这是this question的延续。我让AJAX将需要使用的数据发送到PHP文件,并使用代码更新它发送的信息。但是,发生了两个错误。

  1. 我收到一条消息Error:Error: jQuery21405680291895882033_1487801210725 was not called

  2. 我发送的数据在其末尾有一个“:1”,给我一个错误。

  3. 我如何解决这两个错误?非常感谢你!

    JS代码:

    function getTableData(){
                var array = [];
                var headers = [];
                $('#tablaListado th').each(function(index, item) {
                    headers[index] = $(item).html();
                });
                $('#tablaListado tr').has('td').each(function() {
                    var arrayItem = {};
                    $('td', $(this)).each(function(index, item) {
                        if($(this).find("textarea").length){
                            var costo = $(this).find('textarea').val();
                            arrayItem[headers[index]] = costo;
                        }else{
                            arrayItem[headers[index]] = $(item).html();
                        }
                    });
                    array.push(arrayItem);
                });
    
                actualizarCostos(array);
            }
    
            function actualizarCostos(array){
                if(array.constructor === Array){
                    for(var i = 0; i < array.length ; i++){
                        console.log(array[i]);
                        console.log(JSON.stringify(array[i]));
                        $.ajax({
                            url: "http://www.page.com/Update.php",
                            contentType: "application/json; charset=utf-8",
                            dataType: "jsonp",
                            jsonp: false,
                            jsonpCallback: jsonCallback,
                            cache: true,
                            data:{ "table_data": JSON.stringify(array[i])},
                            success: function (data) {
                                console.log(data);
                            },
                            error: function(xhr,status,err){
                                 alert("DEBUG: status"+status+" \nError:"+err);
                             }, 
                            traditional: true
                        });
                    }
                }else{
                    alert("Input must be array");
                }
            }
    
            function jsonCallback(data, status){
                console.log(data + " " + status);
            }
    

    PHP部分:

    //Added on top of the page
    header('Access-Control-Allow-Origin: *');
    ...
    function updateCosts($json){
                conectar();
                $array = json_decode($json, true);
                echo "<script>console.log('$array');</script>";
                $costo = $array["Costo"];
                $sku = $array["SKU"];
                $instruccion = "UPDATE articulos SET art_cost='$costo' WHERE art_SKU = '$sku'";
    
                return ejecutarInstruccion($instruccion);
    }
    
    if(isset($_GET['table_data'])){
               foreach($_GET['table_data'] as $index => $item)
               {
                      // do something here 
                      echo "<script>console.log('$item');</script>";
                      updateCosts($item);
               }
    
               // Response back - if needed
               echo json_encode(array('status'=>true, 'msg'=>'Some Message'));
    }
    

    编辑:

    我忘了提到我已经尝试在此代码上将'jsonp'更改为'json'但我得到一个错误,说PHP文件不允许外来数据,即使我尝试使用header('Access-Control-Allow-Origin: *')表示文件。

2 个答案:

答案 0 :(得分:2)

您的网页正在返回JSON,而不是JSONP。它们不可互换。从jsonp来电中删除jsonpCallback$.ajax()媒体资源,然后将dataType更改为json

$.ajax({
    url: "http://www.page.com/Update.php",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    cache: true,
    data: { 
        table_data: JSON.stringify(array[i])
    },
    success: function (data) {
        console.log(data);
    },
    error: function(xhr,status,err){
        alert("DEBUG: status" + status + " \nError:" + err);
    }, 
    traditional: true
});

答案 1 :(得分:1)

我建议您使用以下AJAX:

function actualizarCostos(array){
        if(array.constructor === Array){
            for(var i = 0; i < array.length ; i++){
                console.log(array[i]);
                console.log(JSON.stringify(array[i]));
            }
            $.ajax({
                url: "http://www.page.com/Update.php",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                data:{ "table_data": JSON.stringify(array)},
                success: function (data) {
                    console.log(data);
                },
                error: function(xhr,status,err){
                    alert("DEBUG: status"+status+" \nError:"+err);
                }
            });
        }else{
            alert("Input must be array");
        }
    }

然后在服务器的PHP端执行For-Loop。也许array中的每个变量都有一个隐藏参数来知道它自己的索引,或者JSON正在做一些奇怪的事情,比如显示数组中元素的数量(在这种情况下为1,因为你重复遍历每个元素)