gpt4 book ai didi

ruby-on-rails - 读取跨域 JSON 响应

转载 作者:行者123 更新时间:2023-12-03 22:33:18 26 4
gpt4 key购买 nike

     <script>
$.ajaxSetup( {contentType: 'application/json'} );
function submit_data(f){
alert('submitting')
var data_string = $(f).serialize();
$.ajax({
url: "http://localhost:3000/application/1/contact_us.json?jsonpcallback=?"+data_string,
dataType: "jsonp",
type : 'post',
processData: false,
crossDomain: true,
contentType: "application/json",
jsonp: false,
jsonpcallback: result()
});
}

function result(){
alert('back in')
alert(data)
}
function jsonp1300279694167(){
alert('dhoom')
}
</script>

我有上面的脚本跨域查询并在表单中发布数据。
一切似乎都运转良好。 JSON 响应可以在 firebug 控制台中看到。我想处理响应并相应地向用户显示状态消息。我应该如何实现它?

<小时/>

更新

我已按照 T.J. 的建议进行了尝试。克劳德,但还没有运气。修改后的代码如下

function submit_data(f){
alert('submitting')
var data_string = $(f).serialize();
$.ajax({
url: "http://localhost:3000/application/1/contact_us.json?"+data_string,
dataType: "jsonp",
crossDomain: true,
success: handleSuccess()
});
}



function handleSuccess(data) {
alert("Call completed successfully");
alert(data);
}

这不会访问数据并警告未定义。如果我尝试从 success: handleSuccess() 传递它,它会出错并使用 http 请求重定向。

我收到来自 Ruby on Rails 应用程序的响应。这是我正在使用的方法

def create
errors = ContactUsForm.validate_fields(params)
logger.info errors.inspect
if errors.blank?
respond_to do |format|
format.json {render :json => {:status => 'success'}.to_json}
end
else
respond_to do |format|
format.json {render :json => {:status => 'failure', :errors => errors}.to_json}
end
end
end

我的 Rails 应用程序中是否需要配置任何内容

最佳答案

你已经很接近了。您只需像往常一样使用 success 回调(请参阅 ajax 文档),而不是特殊的回调:

$.ajax({
url: "http://localhost:3000/application/1/contact_us.json?jsonpcallback=?"+data_string,
dataType: "jsonp",
type : 'post',
processData: false,
crossDomain: true,
contentType: "application/json",
jsonp: false,
success: function(data) {
// Use data here
}
});

另外,你的代码:

jsonpresponse: result()

...将调用 result 函数,然后将其返回值用于 ajax 调用的 jsonpresponse 属性。如果您想使用单独的函数,那没问题,但您不包含 (),因此:

$.ajax({
url: "http://localhost:3000/application/1/contact_us.json?jsonpcallback=?"+data_string,
dataType: "jsonp",
type : 'post',
processData: false,
crossDomain: true,
contentType: "application/json",
jsonp: false,
success: result
});

function result(data) {
// use `data` here
}

此外,我很确定如果您使用 success,您就不需要/想要 jsonp 参数,因此:

$.ajax({
url: "http://localhost:3000/application/1/contact_us.json?jsonpcallback=?"+data_string,
dataType: "jsonp",
type : 'post',
processData: false,
crossDomain: true,
contentType: "application/json",
success: result
});

function result(data) {
// use `data` here
}

最后:您确定要设置contentType吗?这涉及到发送到服务器的内容,而不是从服务器接收的内容。如果您确实将 JSON 编码的数据发布到服务器,那就太好了,没问题;但看起来您正在使用 jQuery 的 serialize 函数,该函数不会生成 JSON(它会生成 URL 编码的数据字符串)。因此,您可能还想从调用和 ajaxSetup 调用中删除 contentType

关于ruby-on-rails - 读取跨域 JSON 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5325774/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com