【问题标题】:No JSON response in jQuery form plugin in IE9IE9 中的 jQuery 表单插件中没有 JSON 响应
【发布时间】:2012-10-14 10:13:52
【问题描述】:

我在表单中使用http://www.malsup.com/jquery/form/#ajaxForm。 我设置了一个表单来通过 Ajax 将图像上传到服务器。没有 IE9 一切正常 :)。 我无法从服务器获得 JSON 响应,尽管在其他浏览器上它可以正常工作。 我尝试在成功函数中添加一些 alert(),但看起来成功函数没有加载事件。

我的 JS 代码:

$(function() {

    $('#upload-image').ajaxForm({
        dataType:  'json',
        success: processJson
    });

    function processJson(data) {
        var i = 0;
        $.each(data, function(key, val) {
            $('<li id="image_' + key + '"><input type="checkbox" name="delete_image[' + key + ']" /><img src="' + val + '" alt=""/></li>').hide().appendTo('#images').delay(i).fadeIn('slow');
            i += 1000;
        });
    }

});

以及在 PHP 中生成 JSON 响应的代码:

    $output = array();

    foreach ($files['Filedata'] as $file)
    {
        $file_arr = $this->_save_image($file);

        $image = ORM::factory('image');

        $image->filename = $file_arr['filename'];
        $image->gallery_id = $gallery_id;
        $image->save();

        $output[$image->id] = Route::get('uploads')->uri(array('dir' => 'images/120x120', 'file' => $image->filename));

    }
    $this->request->headers('Content-type','application/json; charset='.Kohana::$charset);
    $this->response->body(json_encode($output));

我发现了一些关于类似问题的帖子(从响应中删除 html 标签),但这对我没有帮助。 怎么了?

编辑: IE 调试模式告诉我访问已被拒绝在“form.submit();”这一行。在 jQuery 表单插件库中。 这似乎是某种与在 localhost 上运行 javascript 相关的安全拒绝。

【问题讨论】:

  • 尝试注释掉你的 $this->request->headers 行并检查。因为如果你传递 dataType:json,那么你不需要从你的 php 中设置 json 头
  • 评论这一行没有帮助。我的操作是直接在表单标签中设置的。
  • 也许是因为我为 apache 使用了不同的 80 端口?我有两台服务器,一台 80 端口上的 IIS 和 81 端口上的 apache。但是,在我的应用程序运行的每一刻,URL 看起来都是正确的。
  • 请求http的响应是什么? 200 OK,302,500 还是什么?

标签: php jquery ajax json


【解决方案1】:

这可能是 IE9 无法识别字符集导致的错误。我不得不面对类似的问题。

这应该有帮助

$.ajaxSetup({ scriptCharset: "utf-8" , contentType: "application/json; charset=utf-8"});

【讨论】:

    【解决方案2】:

    json 甚至服务器响应都不是问题。我可以看到你的更新,问题和我的一样,IE根本不允许提交,所以没有请求=没有响应。

    我试图找出问题所在,作者页面上的示例有效 - 我的不是。

    【讨论】:

    • 不,IE 提交表单,因为它保存了我的图像 :)。我已经通过设置 $this-&gt;auto_render = false (Kohana 框架) 解决了我的问题,什么时候也是 internal ($this->request->is_internal()) 请求,现在它可以正常工作了:)。
    • 抱歉,我有类似的问题 - 由于 submit() 上的“访问被拒绝”,无法事件开始文件上传;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多