在php foreach循环中调用Ajax

时间:2013-12-18 22:30:46

标签: php jquery ajax wordpress

我是ajax的新手,我正在尝试在我的wordpress项目中实现它。

ajax调用工作正常,但问题是ajax结果仅显示foreach循环中的第一个项目。我想我在jQuery函数中缺少迭代或$ .each循环?

我不知道......

这是我到目前为止所得到的:

我的wordpress循环:

{foreach $posts as $item}
{first}<ul class="items">{/first}
<li class="item">
    [....]
        <div class="price__tag">
            <input type="hidden" id="price" value="FRA8" />
            <div id="test-div"></div>
        </div>
    [....]
</li>
{last}</ul>{/last}
{/foreach}

我的jQuery ajax功能:

jQuery(document).ready(function() {
var price= jQuery("#price").val();

    jQuery.ajax({
        type: 'POST',
        url: 'http://DOMAIN.COM/wp-admin/admin-ajax.php',
        data: {
            action: 'myAjax',
            greeting: price,
        },
        success: function(data, textStatus, XMLHttpRequest){
            jQuery("#test-div").html('');
            jQuery("#test-div").append(data);
        },
        error: function(MLHttpRequest, textStatus, errorThrown){
            alert(errorThrown);
        }
    });
});

一些背景信息 - 结果来自SOAP API请求,并且发布了在wordpress循环中显示的特定产品的价格。

我希望你明白我的问题。

对此非常感谢!

修改的 为了完整性,我还添加了wordpress函数:

function add_myscript(){
    wp_enqueue_script( 'myajax.js', get_bloginfo('template_directory') . "/Templates/content/myajax.js", array( 'jquery' ) );
}
add_action( 'init', 'add_myscript' );
function myAjax(){

[…SOAP CLIENT…]

        $result = $soapClient->CarParkAvailRate($parameters);
        $error = $result->Warnings->Code;
        if ($error == '100'){
            $results = "not avail!";
        }
        else {
            $results = $result->CarParks->CarParkRS->PriceCarPark->TotalPrice;
        }
    // Return String
    die($results);
}
catch(SoapFault $fault){
$fault->getMessage();
}
}

// create custom Ajax call for WordPress
add_action( 'wp_ajax_nopriv_myAjax', 'myAjax' );
add_action( 'wp_ajax_myAjax', 'myAjax' );

2 个答案:

答案 0 :(得分:2)

元素的“id”值必须是唯一的。列表中的每个项目都有一个<div>元素,其“id”为“test-div”。

循环的每次迭代都会重复这两个元素:

<input type="hidden" id="price" value="FRA8" />
<div id="test-div"></div>

你需要它们为每次迭代都有唯一的id值。

答案 1 :(得分:2)

我没有足够的代表来添加评论,但是,你需要使用迭代来为每个ID添加一些内容以使它们是唯一的,然后你的jquery必须找到每个价格并相应地注入你的代码

您可以使用迭代每个循环的简单计数器,并使用连接将其添加到您的ID中。

它看起来像这样: (伪造的代码,因为我不熟悉Wordpress如何做到这一点)

$i = 1;
{foreach $posts as $item}
{first}<ul class="items">{/first}
<li class="item">
    [....]
    <div class="price__tag">
        <input type="hidden" id="price'.$i.'" value="FRA8" />
        <div id="test-div'.$i.'"></div>
        $i++;
    </div>
[....]
</li>
{last}</ul>{/last}
{/foreach}
相关问题