我只是想知道这是否合适。
是否可以执行从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>
将在回复时执行。
虽然我的问题是:这是正确的还是应该做其他的事情?
答案 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.foo
,data.bar
和data.baz
访问这些媒体资源。