2012-12-09 92 views
0

我只是想知道這是否正確。Ajax完成時返回javascript代碼

是否可以執行從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>

這將在響應被執行。

這有效,但我的問題是:這是正確的,還是應該做別的事情?

回答

1

您可以使用

eval('js_code'); 

了點。但請確保字符串中的代碼來自非常可靠的來源,(可能來自您的Web服務)。

你這樣做的方式是正確的。最好不要使用eval

+0

謝謝!我有時會發現一些事情,但我並不總是確定這是很好的做法,或者我正在做的事實際上是「可以」做的。 – Dimitri

1

我想說你在做什麼沒有錯,但問題是你的JavaScript不會告訴你整個圖像。由於您是從PHP生成js並通過Ajax加載的,因此在您嘗試分析和調試代碼時可能難以理解發生了什麼。例如,您會看到input#customer_name中的值發生更改,但找不到更改該值的代碼,因爲它是由PHP生成並動態提供的。

我會建議只發送來自PHP的數據,並保留在js文件上使用該數據的任何邏輯。考慮到你發佈的代碼,你可以只echo 'something'在PHP,然後做到這一點從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.bardata.baz