在Ajax上返回javascript代码完成

时间:2012-12-09 03:08:28

标签: php javascript jquery ajax

我只是想知道这是否合适。

是否可以执行从Ajax调用返回的javascript代码?

ser = $('#new_customer_ input').serialize();

$.ajax({
type: 'POST',
url: "ajax/newCustomer.php",
data: ser,
success: function(data)
    {
        $('div#result').html(data);
    }
});

假设php文件返回如下内容:

<script>$('input#customer_name').val('something');</script>

将在回复时执行。

虽然我的问题是:这是正确的还是应该做其他的事情?

2 个答案:

答案 0 :(得分:1)

您可以使用

eval('js_code');

为此。但请确保字符串中的代码来自非常可靠的来源(可能来自您的Web服务)。

你这样做是正确的。最好不要使用eval

答案 1 :(得分:1)

我会说你正在做的事情没有错,但问题是你的JavaScript不会告诉你全部情况。由于您是从PHP生成js并通过Ajax加载它,因此当您尝试分析和调试该代码时,可能很难理解发生了什么。例如,您看到input#customer_name更改的值,但您找不到更改该值的代码,因为它是由PHP生成并动态提供的。

我建议只发送来自PHP的数据,并保留在js文件中使用该数据的任何逻辑。考虑到您发布的代码,您可以在PHP上echo 'something',然后从js执行此操作:

$.ajax({
    type: 'POST',
    url: "ajax/newCustomer.php",
    data: ser,
    success: function(data)
    {
        $('input#customer_name').val(data);
    }
});

如果需要发送更复杂的数据,可以使用编码为JSON(echo json_encode($myarray);)的PHP数组。然后在JavaScript data上将是一个数组或对象,您可以根据需要循环它,访问命名属性等等(jQuery将自动为您解析JSON)。

例如,请考虑以下PHP:

$array = array(
    'foo' => 'bar',
    'bar' => true,
    'baz' => 5
);
echo json_encode($array);

鉴于此,ajax回调中的data参数将是一个如下所示的js对象:

{
'foo' : 'bar',
'bar' : true,
'baz' : 5
}

您可以使用data.foodata.bardata.baz访问这些媒体资源。