Jquery ajax成功响应是字符串而不是javascript对象

时间:2014-03-21 21:56:34

标签: javascript jquery ajax

我正在对我的Rails应用程序(所有在localhost上运行)进行jQuery AJAX调用,该应用程序正在使用Javascript进行响应。 javascript正在运行,因为我收到了警报。但是,我想读取js.erb文件中的my_var变量。但是,当我尝试查看success函数的data参数时,它将数据视为字符串。所以做data.my_var是未定义的。

js.erb文件

var my_var = "hi";
alert('this ran');

的javascript

  $.ajax({
      url: "/a/validate?a_id=" + "<%= params[:id] %>",
      context: this,
      dataType: "script",
      data:
      {
        json_a: JSON.stringify(this.a),
        model_to_validate: model,
        target_class: target_class,
        current_class: current_class
      },
      success: function (data, textStatus, jqXHR) {
        if(!this.orderFormViewed) {
          this.orderFormViewed =  data.order_block_opened;
        }
      },
      error: function (data) {
        console.log("error in ajax validate call");
        debugger;
      }
    })

2 个答案:

答案 0 :(得分:1)

如果您只需要获取对象并确保服务器返回json,请尝试将dataType更改为json

答案 1 :(得分:1)

那是因为这正是您告诉它与dataType: "script"做的事情 - 请查看下面的dataType选项。脚本在它自己的上下文中运行,所以你不会看到那个变量(我相信)。如果你想要那套,你将需要以不同的方式进行交流。或者,如果您只需要数据发送json

https://api.jquery.com/jQuery.ajax/

“script”:将响应评估为JavaScript并将其作为纯文本返回。通过将查询字符串参数“_ = [TIMESTAMP]”附加到URL来禁用缓存,除非缓存选项设置为true。注意:这会将POST转换为GET以获取远程域请求。