AJAX POST请求失败

时间:2014-03-26 19:43:54

标签: javascript php jquery ajax json

通用标题的道歉。

基本上,当脚本运行'错误'时会根据下面的jQuery提醒。我有一种感觉这是由我的JSON结构引起的,但我不确定我应该如何改变它。

一般的想法是,有几个单独的项目,每个项目都有自己的属性:product_urlshop_namephoto_urlwas_pricenow_price

这是我的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");
    }
})

这是生成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);

?>

使用这个更简单的JSON脚本可以正常运行:

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

3 个答案:

答案 0 :(得分:0)

您正在循环遍历数组并在每次使用时生成JSON文本

如果连接两个(或更多)JSON文本,则没有有效的JSON。

在循环内构建数据结构。

json_encode数据结构循环之后。

答案 1 :(得分:0)

如果我不得不猜测你正在回显多个无效的json字符串。以下是它应该如何工作:

$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);

在这个例子中,我只回应最终结果一次。

答案 2 :(得分:0)

您正在发送帖子请求,但未使用数据

发送帖子数据
$.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");
}
})