简体   繁体   English

AJAX POST请求失败

[英]AJAX POST request is failing

Apologies for the generic title. 对通用标题表示歉意。

Essentially, when the script runs 'error' is alerted as per the jQuery below. 本质上,当脚本运行时,将按照以下jQuery发出“错误”警报。 I have a feeling this is being caused by the structuring of my JSON, but I'm not sure how I should change it. 我感觉这是由JSON的结构引起的,但是我不确定如何更改它。

The general idea is that there are several individual items, each with their own attributes: product_url , shop_name , photo_url , was_price and now_price . 通常的想法是,有几个单独的项目,每个项目都有自己的属性: product_urlshop_namephoto_urlwas_pricenow_price

Here's my AJAX request: 这是我的AJAX请求:

$.ajax(
{
    url : 'http://www.comfyshoulderrest.com/shopaholic/rss/asos_f_uk.php?id=1',
    type : 'POST',
    data : 'data',
    dataType : 'json',
    success : function (result)
    {
        var result = result['product_url'];
        $('#container').append(result);
    },
    error : function ()
    {
       alert("error");
    }
})

Here's the PHP that generates the JSON : 这是生成JSON的PHP:

<?php

function scrape($list_url, $shop_name, $photo_location, $photo_url_root, $product_location, $product_url_root, $was_price_location, $now_price_location, $gender, $country)
{
    header("Access-Control-Allow-Origin: *");

    $html = file_get_contents($list_url);
    $doc = new DOMDocument();
    libxml_use_internal_errors(TRUE);

    if(!empty($html))
    {
        $doc->loadHTML($html);
        libxml_clear_errors(); // remove errors for yucky html
        $xpath = new DOMXPath($doc);

        /* FIND LINK TO PRODUCT PAGE */

        $products = array();

        $row = $xpath->query($product_location);

        /* Create an array containing products */
        if ($row->length > 0)
        {            
            foreach ($row as $location)
            {
                $product_urls[] = $product_url_root . $location->getAttribute('href');
            }
        }

        $imgs = $xpath->query($photo_location);

        /* Create an array containing the image links */
        if ($imgs->length > 0)
        {            
            foreach ($imgs as $img)
            {
                $photo_url[] = $photo_url_root . $img->getAttribute('src');
            }
        }

        $was = $xpath->query($was_price_location);

        /* Create an array containing the was price */
        if ($was->length > 0)
        {
            foreach ($was as $price)
            {
                $stripped = preg_replace("/[^0-9,.]/", "", $price->nodeValue);
                $was_price[] = "&pound;".$stripped;
            }
        }


        $now = $xpath->query($now_price_location);

        /* Create an array containing the sale price */
        if ($now->length > 0)
        {
            foreach ($now as $price)
            {
                $stripped = preg_replace("/[^0-9,.]/", "", $price->nodeValue);
                $now_price[] = "&pound;".$stripped;
            }
        }

        $result = array();

        /* Create an associative array containing all the above values */
        foreach ($product_urls as $i => $product_url)
        {
            $result = array(
                'product_url' => $product_url,
                'shop_name' => $shop_name,
                'photo_url' => $photo_url[$i],
                'was_price' => $was_price[$i],
                'now_price' => $now_price[$i]
            );
            echo json_encode($result);
        }
    }
    else
    {
        echo "this is empty";
    }
}

/* CONNECT TO DATABASE */

$dbhost = "xxx";
$dbname = "xxx";
$dbuser = "xxx";
$dbpass = "xxx";

$con = mysqli_connect("$dbhost", "$dbuser", "$dbpass", "$dbname");

if (mysqli_connect_errno())
{
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$id = $_GET['id'];

/* GET FIELDS FROM DATABASE */

$result = mysqli_query($con, "SELECT * FROM scrape WHERE id = '$id'");

while($row = mysqli_fetch_array($result))
{   
    $list_url = $row['list_url'];
    $shop_name = $row['shop_name'];
    $photo_location = $row['photo_location'];
    $photo_url_root = $row['photo_url_root'];
    $product_location = $row['product_location'];
    $product_url_root = $row['product_url_root'];
    $was_price_location = $row['was_price_location'];
    $now_price_location = $row['now_price_location'];
    $gender = $row['gender'];
    $country = $row['country'];
}

scrape($list_url, $shop_name, $photo_location, $photo_url_root, $product_location, $product_url_root, $was_price_location, $now_price_location, $gender, $country);

mysqli_close($con);

?>

The script works fine with this much simpler JSON: 该脚本可以使用以下简单得多的JSON正常运行:

{"ajax":"Hello world!","advert":null}

You are looping over an array and generating a JSON text each time you go around it . 您正在遍历数组, 每次遍历数组时都会生成JSON文本。

If you concatenate two (or more) JSON texts, you do not have valid JSON. 如果串联两个(或更多)JSON文本,则没有有效的JSON。

Build a data structure inside the loop. 在循环内部构建数据结构。

json_encode that data structure after the loop. json_encode循环的数据结构。

If i have to guess you are echoing multiple json strings which is invalid. 如果我不得不猜测您正在回显无效的多个json字符串。 Here is how it should work: 这是应该如何工作的:

$result = array();

/* Create an associative array containing all the above values */
foreach ($product_urls as $i => $product_url)
{
    // Append value to array
    $result[] = array(
        'product_url' => $product_url,
        'shop_name' => $shop_name,
        'photo_url' => $photo_url[$i],
        'was_price' => $was_price[$i],
        'now_price' => $now_price[$i]
     );
}
echo json_encode($result);

In this example I am echoing the final results only once. 在此示例中,我仅回显最终结果一次。

You are sending post request but not sending post data using data 您正在发送发布请求,但未使用data发送发布数据

$.ajax(
{
url : 'http://www.comfyshoulderrest.com/shopaholic/rss/asos_f_uk.php?id=1',
type : 'POST',
data : {anything:"anything"}, // this line is mistaken
dataType : 'json',
success : function (result)
{
    var result = result['product_url'];
    $('#container').append(result);
},
error : function ()
{
   alert("error");
}
})

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM