如何在Ajax的响应中执行javascript?

时间:2014-09-15 14:06:18

标签: javascript jquery ajax

在我的Ajax响应中有两个变量: js html

js 变量内容标记脚本中的Javascript ://部分代码 和 html 内容HTML模板。 我如何从成功的响应Ajax执行html代码的js代码?

我尝试了这个解决方案:

$('head').append(response.js); // not works

完整的Ajax请求:

getFormShare: function(type){
        var posting = $.post('/share/getFormShare', { type : type } );

        posting.done(function( response ) {
            response = $.parseJSON(response);

            $("head").append(response.js);
            $('.ShareBlock #block').html(response.html).show();

            initFileUpload(config);
            initEditor();

        });
    }

PHP方面:

$js = $this->listdata->WrapperJavaScript($specialization, array('name_field' => 'type[]', 'tab' =>'tab', 'div_element' => '.specMain', 'label' => 'Category', 'autosearch' => 'true'));

$html = $this->load->view('social/forms/video', $this->data, true);
echo json_encode(array('html' => $html, 'js' => $js)); die();

2 个答案:

答案 0 :(得分:5)

您可以使用.getScript()并在加载后运行代码:

 $.getScript("my_lovely_script.js", function(){

    alert("Script loaded and executed.");
    // here you can use anything you defined in the loaded script

 });

您可以在此处看到更好的解释:How do I include a JavaScript file in another JavaScript file?


编辑: 由于您正在返回实际的javascript并希望执行它,因此您可以在ajax响应中执行此操作:

 $.get(url,function(data){ $("body").append(data); });

编辑: 在Mike的回答的帮助下,如果您的回复中没有脚本标记,则可以使用eval()来运行脚本。他的回答提供了更多信息。

答案 1 :(得分:1)

您可以使用javascript的eval将字符串作为代码运行。

请记住,你的字符串需要是纯JS,没有html或其他元素。

例如

eval("function foo() {console.log('bar');}");
//this call will create/instantiate a function called foo