验证JQuery中是否存在URL

时间:2014-12-15 16:02:44

标签: javascript ajax

我必须在我的JQuery代码的新选项卡中打开一个URL。我使用以下代码来完成它。

window.open(result + PATHtoCALL);

它工作正常但在某些情况下,报告将无法在URL中使用,我在新的浏览器选项卡中获得以下输出

{"success":false,"timestamp":1408690695881,"error":{"code":"0"}}.

所以我认为首先验证报告是否准备就绪可能是个好主意。如果我在其中获得成功,那么我将调用window.open(result + PATHtoCALL);

所以我在Ajax中编写了下面的代码来验证它。但是它总是在错误代码中。

$.ajax({
            url: result + PATHtoCALL,
            type: 'POST',
            dataType: 'json',
            success: (function(resp, statusText, xhr) {
                if (resp.success)
                {
                    console.log('.............Passed');
                }
                else
                {
                    console.log('.........Failed');
                }
            }).bind(this),
            error: (function(xhr, statusText, error) {
                console.log('11111111111111111111111111111111',error);
            }).bind(this)
        });

但是上面的Ajax代码总是失败,错误是“SyntaxError:Unexpected token<”

如果我运行window.open(result + PATHtoCALL);,它可以正常工作。

Ajax代码中的错误是什么?

有没有比这种方法更好的选择?

如果真的很琐事,我很抱歉。我是Javascript的新手。

1 个答案:

答案 0 :(得分:1)

如果您尝试在新窗口中打开URL,那么(可能)它是一个HTML文档(或其他设计为人类可读的内容)。

此:

{"success":false,"timestamp":1408690695881,"error":{"code":"0"}}.

是JSON。

此:

dataType: 'json',

告诉jQuery将响应作为JSON处理,无论服务器说它是什么。

所以:

如果收到错误消息,那将是一个成功的HTTP请求(因为错误是在数据级别而不是HTTP级别表示的),因此Ajax请求将成功。

如果您收到错误消息,它也将是一个成功的HTTP请求,但响应将是HTML。 jQuery将尝试将HTML解析为JSON并失败。然后它会抛出错误处理程序。


您可以采取的解决方法包括:

  • 停止强制jQuery将响应解析为JSON。然后检查jqXHR对象中的content-type标头,以查明是否有文档或JSON。
  • 更改服务器,以便在文档未就绪时返回404错误,然后对其发出HEAD请求并测试状态代码(注意404将触发错误状态,以便您可以使用成功/错误处理程序决定下一步该做什么)
  • 创建一个JSON端点,告诉您(始终使用JSON)文档是否准备好,然后window.open不同的 URL以实际获取文档。