Если вы используете JSONP, то ответ должен быть неким Javascript.Кажется, проблема в том, что он пытается запустить eval
на XML, который не является допустимым Javascript (из того, что я вижу после того, как я получил доступ к указанной вами ссылке).Вот почему вы видите ошибку синтаксического анализатора.Кажется, что QuickBase не генерирует допустимый Javascript.
Если у вас есть доступ к чему-либо на стороне сервера, вы можете создать прокси, который переходит в QuickBase и возвращает XML для вашего вызова AJAX.Это, вероятно, ваш лучший выбор (особенно если QuickBase не поддерживает JSONP).
Способ, которым JSONP побеждает политику того же происхождения, заключается в использовании SCRIPT
.Тег SCRIPT
не соответствует политике того же источника, и поэтому вы можете загружать файлы Javascript, которые находятся в другом домене.Однако для использования JSONP хост-сайт должен поддерживать JSONP.Это означает, что если вы указываете обратный вызов в запросе, он должен возвращать действительный Javascript, который использует обратный вызов, указанный в вашем запросе.Так что, если QuickBase поддерживает JSONP, он может вернуть что-то вроде этого:
jsonp1284044371978({
qdbapi: {
action: "API AddRecord",
errcode: 32,
errtext: "No such database",
errdetail: "The application does not exist or was deleted. If you followed a link to get here, you may want to inform the author of that link that the application no longer exists.",
dbid: "xxxxxx"
}
});
Эти данные теперь находятся в теге SCRIPT
, который сразу же оценивается.Поскольку вы указали функцию обратного вызова, ваш обратный вызов теперь будет вызываться с данными, возвращаемыми QuickBase.
Проблема, с которой вы сталкиваетесь, заключается в том, что данные, возвращаемые QuickBook, представляют собой XML, а не Javascript.Таким образом, ваш тег SCRIPT
выглядит следующим образом:
<script type="text/javascript" src="https://www.quickbase.com/db/xxxxxx?act=API_AddRecord&apptoken=xxxxxxxx&callback=jsonp1284044371978&_fid_11=www.domain.com&_fid_12=xxxxx&_fid_17=xxxxxx&_fid_6=xxxxx&_fid_10=xxxxxxxx&=No+Thanks">
</script>
Что по сути:
<script type="text/javascript">
<qdbapi>
<action>API_AddRecord</action>
<errcode>32</errcode>
<errtext>No such database</errtext>
<errdetail>
The application does not exist or was deleted. If you followed a link to get here, you may want to inform the author of that link that the application no longer exists.
</errdetail>
<dbid>xxxxxx</dbid>
</qdbapi>
</script>
И это, как вы знаете, не является допустимым Javascript.К сожалению, в этой ситуации нет способа обойти эту проблему без использования прокси (насколько я знаю, вы не можете «перехватить» данные, которые получает тег SCRIPT
).Независимо от того, как возвращаются данные, вы можете заключить их в альтернативную форму с прокси-сервером или даже вернуть как прямой XML (jQuery поддерживает это).Если у вас есть прокси, вместо вызова QuickBase, вы будете вызывать прокси, который, в свою очередь, вызывает QuickBase.Затем ваш прокси-сервер возвращает XML на ваш вызов AJAX.Единственное изменение, которое вам действительно нужно, это установить dataType
в вызове jQuery AJAX на xml
вместо jsonp
.
EDIT
Согласно комментарию Джона,Вы также можете использовать IFRAME
.